Auth modes
One setting decides which sign-in methods the login page offers:?local=true is the escape hatch. On an sso_only deployment, visiting /users/sign-in?local=true shows the password form anyway. Keep one local administrator who can use it — otherwise a misconfigured or unreachable identity provider locks everyone out, including you.Single-provider auto-start
When the mode issso_only and exactly one provider is enabled, there is nothing for the user to choose, so BOW starts the round trip for them: the login page redirects straight to the provider instead of rendering a single button.
The redirect is suppressed when ?local=true is set, or when the provider bounced back with an error — so a failed sign-in can always show you why, rather than looping.
An embedding application that already knows whose session it is opening can pass login_hint, which is forwarded to the provider so a browser holding several accounts doesn’t stop on a chooser:
OIDC providers
Any OIDC-compliant provider works. Entra ID (Azure AD) and Okta are the common ones.name is the routing slug, and it determines the callback path — register this exact URL as a redirect URI on the provider, or sign-in fails before the login form appears:
issuer URL, not from name, so a provider called corp-sso pointing at login.microsoftonline.com still renders as Microsoft. Issuers that aren’t recognised get a neutral lock icon and their configured label.
Put
client_secret in an environment variable or a Kubernetes Secret and reference it with ${VAR}. Never commit it to bow-config.yaml.Group sync
Setsync_groups: true with a group_claim to map provider groups onto BOW roles. resolve_group_names: true turns group object IDs into readable names where the provider supports it.
SAML 2.0
Any SAML 2.0 identity provider works — Entra ID, Okta, PingFederate, ADFS, or anything else that can be configured to this profile. Like OIDC providers, SAML providers appear as buttons on the login page and count toward the single-provider auto-start rule above.base_url must be an HTTPS origin. An enabled SAML provider is rejected at startup if base_url is not https:// or carries a path. The browser posts the assertion to BOW cross-site, which needs a Secure cookie.
Each provider admits exactly one organization. organization_id names an organization that already exists. A valid assertion never admits a user anywhere else.
Register BOW with your identity provider
For a provider namedcompany-sso, give your IdP these values. The name must be a lowercase slug, unique across all SAML, OIDC and Google providers.
Scheme, host, port and path must match exactly. Leave RelayState and the logout URL unset, and assign the users who should have access to the IdP application.
Identity provider trust
Pick one source of trust underidp:
- Metadata URL
- Metadata file
- Explicit certificates
Attribute mapping
attributes maps assertion attributes to the BOW user. Use the attribute’s exact Name — including the full URI if your IdP emits one — not its friendly or display name.
Admission and existing accounts
Withauto_provision_users: false, a person signing in for the first time needs a pending invitation (from the Members tab in settings) for their email in that organization, and takes the role the invitation assigns. With true, anyone your IdP lets through joins the organization as a member; seat limits still apply.
A SAML login never takes over an existing account just because the email matches. To connect an existing member to their SAML identity, approve the link explicitly:
subject attribute). The assertion must carry the same email, and the account must already be a member of the organization. Superusers, service accounts and LDAP-bound users can’t be linked this way.
Removing someone from the organization, deactivating them, or disabling the provider ends their SAML sessions, and auto-provisioning will not re-admit a member you removed.
Signed requests and encrypted assertions
Both are optional and need a service provider key pair:What SAML does not cover
- Start sign-in from BOW. IdP-initiated (unsolicited) logins are not accepted; an IdP portal tile should link to
/users/sign-in. - Signing out of BOW ends the BOW session only, not the IdP session. SAML Single Logout is not supported.
- Roles don’t come from SAML claims. Use invitations, SCIM, LDAP group sync, or assign roles in BOW.
- No delegated data access. A SAML assertion is not an OAuth token, so per-user data connections still need their own sign-in — see Authentication and Access.
Troubleshooting
LDAP and Active Directory
LDAP requires an Enterprise license. See License Key.
bind_dn and bind_password must be set — anonymous bind is not accepted. Give the account read-only lookup rights and nothing more.
TLS is always verified. Certificate checking cannot be disabled. Use ldaps:// on 636, or start_tls: true on 389 — the connection is verified before either bind is attempted. If your directory presents a private CA, point ca_certs_file at the mounted bundle; leave it empty to use the system trust store.
Admission is explicit. A user may sign in only if they are a member of admission_group_dn, and each deployment admits exactly one BOW organization via organization_id. Nested AD group membership is resolved by AD itself, so nested groups work as your directory defines them.
An LDAP login cannot take over a local account that happens to share the same email address; the collision is rejected rather than merged.
There is no password fallback during an outage. If the directory is unreachable, directory users cannot sign in — BOW will not silently fall back to a local password. allow_local_superuser_login: true is the one deliberate recovery path, and it applies only to local superusers that are not linked to a directory identity.
Group sync
Sync is scoped to the organization named byorganization_id and only touches memberships it owns. An empty or partial directory response will not delete invited members, and a reconciliation that fails partway rolls back rather than applying half of itself.
Delegated SQL identity
When a SQL Server connection uses per-user Kerberos delegation, the impersonated principal comes only from a verified directory identity — the provider, the account’s SID and its subject must all match. It is never inferred from the signed-in user’s email address.kerberos_realm sets the AD realm explicitly, so it stays correct when your users’ email or UPN suffixes differ from the realm name. See SQL Server for the delegation setup itself.
Sessions
Session tokens are revocable. Signing out, changing or resetting a password, and an administrator’s force-signout all invalidate every token already issued to that user. SSO does not return the session token in the redirect URL. The callback returns a single-use code, valid for 60 seconds, which the application exchanges for the token over POST — so the token never lands in a browser history, a proxy log, or aReferer header.
Related
Data source authentication
Shared credentials versus per-user sign-in, for connections rather than logins.
Deployment Options
Where
bow-config.yaml lives, and the Helm values that mirror it.