How Web Access works

Web Access puts web consoles — Grafana, Prometheus, a mail catcher, a BMC's web interface or API — behind the same login, groups, approvals, locks and audit as SSH. There is no agent on the console's host and no browser extension: the brokers are a reverse proxy in front of each application, and the browser talks to the application's own host name, which resolves to the brokers' shared address.

This page is the path a request takes. Configuring applications is how an application gets into apps.yaml, Web Access policy is who gets in and what each request may do, and preparing a web console is what the console itself needs.

The parts

Opening an application

  1. The user opens the application's address (or clicks it on the web UI's My applications page, /apps, which lists what this user may open). The application's links open in a new tab.
  2. No application session yet: the proxy gives the browser a short-lived state cookie and sends it to the web UI's hand-off endpoint (/apps/handoff). If the user is not signed in to the web UI, the web UI asks for the login first and then continues.
  3. The gates, on the web UI: the user must be in one of the application's allow_groups, must not be on a reserved name, must not be locked (neither the user nor the application), and — if the application asks for one — must hold an open approval window (four-eyes, or self-service on a stated reason). A refusal is an APP_ACCESS_DENIED audit line with its reason; the user sees a general sentence.
  4. The hand-off: the web UI issues a one-time code, valid for 60 seconds, and sends the browser back to the application's /_isg/callback. The proxy redeems the code only in the browser that holds the matching state cookie, checks the approval, the lock and the licence once more, and opens the application session: the isg_app cookie (HttpOnly, Secure, SameSite=Lax) on the application's host. The audit line is APP_SESSION_STARTED.
  5. From then on every request carries isg_app, and the proxy forwards it to the upstream.

Each request

For every request of an open application session the broker, in this order:

If the request cannot be recorded, the policy cannot be loaded, the directory cannot be asked or the secret cannot be read, the request is not let through (503) — Web Access fails closed.

How a session ends

Signing out of the web UI, losing the group, a lock, an administrator closing the session, the end of an approval window, or the idle or absolute limit closes the application session — on every broker, within about 5 seconds for the serving broker. A request to one of the application's logout_paths signs the user out of ISG for that application. The audit line is APP_SESSION_CLOSED with its reason.

What the browser never sees

What Web Access is not