Orbtrace

Sign-in & SSO

How users sign in to Orbtrace. Pick a Single Sign-On provider, configure it once, and your team gets in. No passwords, no separate accounts to maintain.

For production, Orbtrace keeps no passwords of its own. Everyone signs in through your existing identity provider (SSO) — the same one your team already uses for email or Slack. You configure the provider once, restart Orbtrace, and your colleagues can sign in. This is the recommended path: your IdP's MFA, conditional access, and offboarding all apply automatically.

There is also one break-glass local admin login — a username/password form so a fresh install without an IdP is never locked out. On first boot with no SSO configured, Orbtrace auto-provisions it with a generated, per-install password and forces a password change on the first login. It's covered below, with a clear warning that it is break-glass, not production sign-in (no MFA, no lockout).

This page walks you through:

  • What's supported, in one table
  • Who becomes the first administrator (and the optional local login)
  • Step-by-step setup for each provider
  • Running more than one provider in parallel
  • Turning a provider off
  • The two roles every user has
  • What to check when something doesn't work

What's supported

You can wire Orbtrace to any one — or any combination — of these:

On screen
  • GoogleFor teams on Google Workspace (Gmail-based email). Free to set up; takes about five minutes inside the Google Cloud Console.
  • MicrosoftFor teams on Microsoft 365 / Entra ID (formerly Azure Active Directory). Free to set up; configured inside the Entra admin centre.
  • GitHubFor engineering-only teams who already gate everything on GitHub. Set up as a GitHub OAuth App in your organization's settings.
  • Custom (OIDC)For everything else: Keycloak, Authelia, Auth0, Okta, JumpCloud, OneLogin, Ping, and any other identity system that speaks OIDC. Most enterprise IdPs do.

Which one should I pick?

Pick the one your company already uses for sign-in. If you have a corporate SSO (Okta, Keycloak, Entra, anything), pick Custom (OIDC) — that's the path that respects your existing security policy, MFA enrolment, conditional-access rules, and offboarding workflow. If you're a small team without a corporate IdP, pick Google or Microsoft based on whichever you use for company email.

Who becomes the first administrator

When you first start Orbtrace, no one has any role yet. The first person who signs in is just a regular user — they can see screens but can't change anything in Admin.

To pin one operator email as the administrator from the start, set this in your deployment:

ORBTRACE_BOOTSTRAP_ADMIN_USERNAME=you@yourcompany.com

The first time that email signs in (through any provider), Orbtrace gives that account the Administrator role. If the account already exists as a regular user, Orbtrace promotes it on the next sign-in. The comparison is case-insensitive, so You@YourCompany.com and you@yourcompany.com both match. Orbtrace re-applies this on every login, so the pinned operator can never accidentally lose admin.

Forgot to set it?

No problem. Sign in once so your account exists in the database, set ORBTRACE_BOOTSTRAP_ADMIN_USERNAME in your .env, restart Orbtrace, then sign out and sign in again. You'll come back as administrator.

The break-glass local admin (fresh installs)

A fresh install with no SSO configured is never locked out: Orbtrace auto-provisions a local break-glass admin on first boot — username admin@orbtrace.local (or your pinned ORBTRACE_BOOTSTRAP_ADMIN_USERNAME) with a generated, per-install password. There is deliberately no fixed default password — a shared built-in credential on every install would be a critical vulnerability, so the credential is random every time and you are required to set a new password on your first login before Orbtrace will issue a session.

Where to read the generated password:

  • Helm — the chart stores it in a Secret (it survives upgrades):
    kubectl -n <namespace> get secret <release>-bootstrap-admin \
      -o jsonpath='{.data.password}' | base64 -d
  • Docker Compose / bare JAR — it is printed once in the startup log:
    docker compose logs orbtrace-server | grep "BREAK-GLASS"

Configuring any SSO provider disables the auto-generation (pure-SSO sign-in page). On Helm you can also turn the break-glass admin off explicitly with orbtrace.bootstrapAdmin.enabled=false.

Seeding the credential yourself

Prefer to pick the initial password instead of the generated one? Set both values:

ORBTRACE_BOOTSTRAP_ADMIN_USERNAME=you@yourcompany.com
ORBTRACE_BOOTSTRAP_ADMIN_PASSWORD=a-strong-password

The sign-in page shows a username/password form (next to any SSO buttons). The password is BCrypt-hashed into the database at boot and you'll still be asked to replace it on first login (opt out with ORBTRACE_BOOTSTRAP_ADMIN_FORCE_PASSWORD_CHANGE=false). Once you change it in-app the credential is yours — the env value no longer overrides it on restarts.

Lost the admin password?

Set ORBTRACE_BOOTSTRAP_ADMIN_RESET=true for one boot (restart): the credential is re-seeded — from ORBTRACE_BOOTSTRAP_ADMIN_PASSWORD if set, otherwise a fresh generated one (Helm: rotate it in the <release>-bootstrap-admin Secret first, or read the new one from the log) — and the first-login change is required again. Remove the flag after the recovery boot.

Break-glass, not production sign-in

The local login exists to get you in and wire SSO. It has no MFA, no account lockout, and no rate limiting — and a password set without a username aborts startup. For any real deployment use SSO, so your IdP's security controls apply; keep the local admin as break-glass (or disable it). Use the username on its own (no password, SSO configured) to designate the admin while still signing in through SSO.

Set up Google

You'll create an OAuth client inside Google Cloud Console. Google will give you two values — a client ID and a client secret — which you paste into Orbtrace's .env file.

  1. 1

    Open the Google Cloud Console

    Go to console.cloud.google.com and sign in with the Google Workspace account that administers your company domain. Create a project if you don't already have one (any name; it's an internal label).

  2. 2

    Configure the OAuth consent screen

    In the left menu, open APIs & Services → OAuth consent screen. Choose Internal (only people in your Workspace can sign in) if your company is on Workspace, otherwise External. Fill in the app name (e.g. "Orbtrace"), support email, and your company's domain. Save.

  3. 3

    Create the OAuth client

    Open APIs & Services → Credentials, click Create credentials → OAuth client ID, choose Web application.

    Under Authorized redirect URIs, add exactly this URL — replacing https://orbtrace.example.com with your actual Orbtrace URL:

    https://orbtrace.example.com/login/oauth2/code/google

    Click Create. Google shows you a Client ID and Client Secret. Copy both — you can't see the secret again later.

  4. 4

    Paste them into Orbtrace's .env

    Open docker/.env on the server where Orbtrace runs, find these two lines, and paste in the values:

    GOOGLE_CLIENT_ID=<the client ID Google just showed>
    GOOGLE_CLIENT_SECRET=<the client secret Google just showed>
  5. 5

    Restart Orbtrace

    From the same folder:

    docker compose up -d --force-recreate orbtrace

    The sign-in page will now show a Continue with Google button. Click it, sign in with your Google account, and you'll arrive on Orbtrace.

Set up Microsoft (Entra ID)

You'll register an application inside the Entra admin centre. Microsoft will give you a client ID, a client secret, and a tenant ID.

  1. 1

    Open the Entra admin centre

    Go to entra.microsoft.com and sign in with a Microsoft 365 account that has permission to register applications (Global Administrator, Application Administrator, or Cloud Application Administrator).

  2. 2

    Register a new application

    Open Identity → Applications → App registrations → New registration.

    • Name: Orbtrace (or whatever you want users to see during sign-in)
    • Supported account types: "Accounts in this organizational directory only" — limits sign-in to people in your tenant
    • Redirect URI: select Web and enter your URL:
    https://orbtrace.example.com/login/oauth2/code/microsoft

    Click Register. The overview page now shows an Application (client) ID and a Directory (tenant) ID — copy both.

  3. 3

    Create a client secret

    Open Certificates & secrets → Client secrets → New client secret. Give it any description, pick an expiry (Microsoft requires one; 24 months is reasonable — set a calendar reminder to renew before then).

    Click Add. Microsoft shows the secret once — copy it now. You can't see it again later.

  4. 4

    Grant the necessary permissions

    Open API permissions. The default User.Read is already there and is enough. If your tenant requires admin consent for the default permissions, click Grant admin consent for <tenant name>.

  5. 5

    Paste them into Orbtrace's .env

    Open docker/.env and fill in:

    MICROSOFT_CLIENT_ID=<the Application (client) ID>
    MICROSOFT_CLIENT_SECRET=<the client secret value>
    MICROSOFT_TENANT=<the Directory (tenant) ID>

    The tenant ID locks sign-in to your organization. If you want anyone with any Microsoft account to sign in (rare; usually not what you want), use common instead.

  6. 6

    Restart Orbtrace

    docker compose up -d --force-recreate orbtrace

    The sign-in page will now show a Continue with Microsoft button.

Set up GitHub

You'll create a GitHub OAuth App inside your organization's settings.

  1. 1

    Open your organization's OAuth Apps page

    Sign in to GitHub as the organization owner. Go to your organization → Settings → Developer settings → OAuth Apps → New OAuth App.

    (Personal accounts also work — Settings → Developer settings → OAuth Apps — but for company use the organization-owned app is what you want.)

  2. 2

    Fill in the application form

    • Application name: Orbtrace
    • Homepage URL: https://orbtrace.example.com
    • Authorization callback URL:
    https://orbtrace.example.com/login/oauth2/code/github

    Click Register application. GitHub shows the Client ID on the next page.

  3. 3

    Generate a client secret

    On the same page, click Generate a new client secret. Copy the value — GitHub shows it once.

  4. 4

    Paste them into Orbtrace's .env

    GITHUB_CLIENT_ID=<the client ID>
    GITHUB_CLIENT_SECRET=<the client secret>
  5. 5

    Restart Orbtrace

    docker compose up -d --force-recreate orbtrace

    The sign-in page will now show a Continue with GitHub button.

GitHub email privacy

GitHub lets users hide their primary email. If a colleague's email is hidden, Orbtrace can't create their account and sign-in will fail with a clear message. Ask them to either make a verified email public in GitHub → Settings → Emails, or pick a different provider.

Set up a custom identity provider (OIDC)

This is the path for Keycloak, Authelia, Auth0, Okta, JumpCloud, OneLogin, Ping, and any other identity system. You need three things from your IdP:

  1. A Client ID and Client Secret (your IdP gives these when you register Orbtrace as an application)

  2. An Issuer URL (sometimes called "OIDC discovery URL" or "metadata URL" — points to your IdP's configuration)

  3. The redirect URL to register inside your IdP, which is always:

    https://orbtrace.example.com/login/oauth2/code/oidc
  1. 1

    Register Orbtrace as an application inside your IdP

    In your IdP's admin console, create a new OIDC client / application. The exact menu name varies:

    • Keycloak: Realm → Clients → Create client → choose OpenID Connect as the protocol
    • Auth0: Applications → Create application → Regular Web Application
    • Okta: Applications → Create App Integration → OIDC - OpenID ConnectWeb Application
    • Authelia: Edit configuration.yml → add an entry under identity_providers.oidc.clients
    • JumpCloud / OneLogin / Ping: look for "OIDC application" or "Web application" templates

    Use the redirect URL above. Most IdPs let you tick which OIDC flow is allowed; choose Authorization code (sometimes labelled "Standard flow"). Make sure the IdP returns the openid, email, and profile scopes.

  2. 2

    Copy the issuer URL

    Every OIDC provider publishes its configuration at a well-known address. Common shapes:

    ProviderIssuer URL looks like
    Keycloakhttps://sso.example.com/realms/<realm-name>
    Auth0https://<your-tenant>.auth0.com/
    Oktahttps://<your-tenant>.okta.com/oauth2/default
    Autheliahttps://auth.example.com
    Microsoft Entra (as OIDC)https://login.microsoftonline.com/<tenant-id>/v2.0

    If you're not sure: open <your-issuer-url>/.well-known/openid-configuration in a browser. If you see JSON, that's the right URL (without the /.well-known/... suffix). If you see a 404, you have the wrong URL.

  3. 3

    Paste everything into Orbtrace's .env

    OIDC_CLIENT_ID=<the client ID your IdP gave>
    OIDC_CLIENT_SECRET=<the client secret your IdP gave>
    OIDC_ISSUER_URI=<the issuer URL from step 2>
    ORBTRACE_OIDC_DISPLAY_NAME=Acme SSO

    ORBTRACE_OIDC_DISPLAY_NAME is the label shown on the sign-in button. Set it to something your team recognises — "Acme SSO", "Keycloak", "Company login". If you leave it blank, the button reads "Continue with Single Sign-On".

  4. 4

    Restart Orbtrace

    docker compose up -d --force-recreate orbtrace

    Orbtrace asks your IdP for its configuration once at startup — there's nothing else to wire. The sign-in page will now show your custom button.

MFA, conditional access, group restrictions

All of these are your IdP's job, not Orbtrace's. If you require MFA, configure it in your IdP and every Orbtrace sign-in will be MFA-gated automatically. Same for conditional access (IP allow-list, device-trust checks) and group-based "who is allowed to sign in at all." Orbtrace inherits whatever policy you've already set up.

Running more than one provider at the same time

Nothing special — fill in the variables for every provider you want, restart, and every configured provider's button shows up on the sign-in page in parallel.

A common combination:

  • Custom OIDC (Keycloak, your corporate SSO) — the primary path for employees
  • Google — for a couple of contractors who don't have corporate accounts

Both are configured at the same time. Employees click one button, contractors click the other.

Turning a provider off

To hide a provider from the sign-in page: clear its variables in .env and restart.

# Disable Google by clearing both:
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=

The button vanishes on the next start. Existing user accounts that were created through that provider stay in Orbtrace — they just can't sign in any more (until you re-enable the provider or move them to another one).

Disabling your only sign-in path

If you turn off every provider, nobody can sign in. The sign-in page will show "No login providers are configured" with a hint to the operator. Always make sure at least one provider works before you disable the others.

Roles

Orbtrace has exactly two roles. Every user has one or the other.

On screen
  • USERThe default role for anyone who signs in. Can read everything (logs, traces, metrics, dashboards, incidents), run searches, view RCA results, look at alerts. Can save personal views and dashboards. Cannot change any setting in the Admin area.
  • ADMINEverything a USER can do, plus full access to the Admin area: manage users and their roles, configure the AI provider, view audit logs, manage retention, sampling policy, and integration secrets.

The first administrator is set by ORBTRACE_BOOTSTRAP_ADMIN_USERNAME (see above). After that, any administrator can promote other users in Admin → Users. Orbtrace prevents you from demoting the last remaining administrator — there's always at least one account that can rescue the others.

No per-screen permissions

Orbtrace is a single-tenant tool — everyone on the instance sees the same data. There's no "this team can see service A, that team can't" — that's enforced one level up, at the Helm namespace or VM boundary, by giving each team its own Orbtrace deployment.

When something doesn't work

A short checklist of the most common stumbles.

SymptomWhat it usually means
The sign-in page is empty — no buttonsNone of the providers are configured. Every variable is either unset or still says change-me. Fill in at least one provider's variables and restart.
The button is there but clicking it sends me to a 404 or "page not found"The provider's variables are set, but the IdP's redirect URL doesn't match what you registered. Double-check the URL inside your IdP exactly matches https://<your-orbtrace>/login/oauth2/code/<provider>. The provider segment is google, microsoft, github, or oidc.
"redirect_uri_mismatch" on the IdP sideSame root cause as above. Look at the URL the browser was sent to (the IdP usually shows it) and copy that exact URL into your IdP's allowed redirect list.
The IdP signs me in, then Orbtrace shows "missing email"Your IdP isn't returning the email claim. For OIDC, make sure the application requests the email scope. For GitHub, make sure the user has at least one verified, public email.
I signed in but the Admin menu isn't visibleYour account is USER, not ADMIN. Either set ORBTRACE_BOOTSTRAP_ADMIN_USERNAME to your email and restart, or have an existing administrator promote you in Admin → Users. (Note: a role change takes effect on your next token refresh — sign out and back in to apply it immediately.)
I get signed in but immediately back out againThe system clock on the Orbtrace server is wrong, so tokens look expired. Check the server time matches a real NTP source within a few seconds.
Sign-in worked yesterday, doesn't today, nothing changedMost likely: a client secret expired (Microsoft especially does this on 6/12/24-month cycles). Generate a fresh secret in your IdP, update .env, restart.

If something isn't on this list, check the Troubleshooting page or open docker compose logs orbtrace — sign-in errors print a clear one-line reason at WARN level.

Where to go next

  • You've just configured your first provider → continue with First login for the five-minute post-sign-in checklist.
  • You want the full list of every setting → see Configuration.
  • You need to invite or manage users → that lives in Admin → Users inside the app once you're signed in as an administrator.