Skip to main content
LangWatch supports SSO with the identity providers below. Choose one and configure it as described. If your provider is not named here and speaks OpenID Connect, use the generic oidc provider. The named entries exist because each has setup steps worth spelling out, not because the others are unsupported.
SSO requires an Enterprise license. Setting the environment variables is not enough on its own: a deployment with an identity provider configured but no license runs in email mode, the identity-provider button is not shown on the sign-in page, and SSO sign-in routes are refused. Email sign-in and Forgot password stay available so users are not locked out, though Forgot password can only deliver if outbound email is configured. If everyone on an unlicensed deployment signs in through SSO, set LANGWATCH_LICENSE_KEY or configure SMTP before upgrading, see Editions and licensing.The decision is made once at startup, so a license activated on a running server enables SSO at the next restart. See Editions and licensing for how to obtain and activate one.

Supported Providers

OAuth Redirect URL

When configuring your identity provider, set the redirect/callback URL to:
Replace {provider} with: auth0, azure-ad, cognito, github, gitlab, google, okta, onelogin, or oidc. This is the same value you set as NEXTAUTH_PROVIDER.
A NEXTAUTH_PROVIDER value LangWatch does not recognise, or one whose client credentials are missing, starts the deployment in email mode and logs which provider it could not mount. That keeps a licensed deployment signable-in while you correct the value, rather than pointing the sign-in page at an identity provider that was never wired up.

Provider Setup

Email/Password

The default mode (NEXTAUTH_PROVIDER=email) needs no identity provider. Users register with an email and password, and a self-service “Forgot password?” link on the sign-in screen lets them reset a forgotten one. Reset links are sent through the same email gateway as the rest of LangWatch. Configure one as described in Email so the reset email can be delivered. Without a gateway the screen says the deployment cannot send email and points the person at whoever operates it, rather than offering a form whose link could never arrive. With one configured, submitting an address that has no account returns the same confirmation as one that does, so the form never reveals who holds an account. The reset link expires one hour after it is issued, and a completed reset signs out the account’s other active sessions. When NEXTAUTH_PROVIDER is set to any SSO provider below and the deployment holds a license, the credential form and the “Forgot password?” link are not shown, and the password reset endpoints are disabled: the identity provider owns credentials from that point on. Without a license the deployment stays in email mode regardless of what NEXTAUTH_PROVIDER says, and both the credential form and password reset remain available.

Auth0

  1. Create an application in the Auth0 Dashboard
  2. Set Allowed Callback URLs to https://your-domain.com/api/auth/callback/auth0
  3. Configure in Helm:
Or via environment variables:

AWS Cognito

  1. In the Cognito console, open your user pool and give it a hosted-UI domain if it does not have one yet (App integration > Domain)
  2. Create an app client with a client secret, and set its Allowed callback URL to https://your-domain.com/api/auth/callback/cognito
  3. Under the app client’s login pages, enable the Authorization code grant flow and the openid, email and profile scopes
  4. Configure in Helm:
Or via environment variables:
The issuer is the user pool’s own issuer, not the hosted-UI domain. LangWatch reads the hosted-UI endpoints from the issuer’s discovery document, so the domain never has to be configured separately. You can confirm a pool’s issuer is reachable with:

Azure AD

  1. Register an application in Azure Portal > App registrations
  2. Add a Redirect URI: https://your-domain.com/api/auth/callback/azure-ad
  3. Create a client secret under Certificates & secrets
  4. Configure in Helm:
The provider is azure-ad while its credentials sit under providers.azureAd. The first is the value LangWatch selects on, the second is the chart’s key for the AZURE_AD_* variables.

GitHub

  1. Create an OAuth App in GitHub Developer Settings
  2. Set Authorization callback URL to https://your-domain.com/api/auth/callback/github
  3. Configure:

GitLab

  1. Create an application in GitLab > Applications
  2. Set Redirect URI to https://your-domain.com/api/auth/callback/gitlab
  3. Select scopes: read_user, openid, profile, email

Google

  1. Create credentials in Google Cloud Console
  2. Add an Authorized redirect URI: https://your-domain.com/api/auth/callback/google

Okta

  1. Create an application in Okta Admin Console
  2. Set Sign-in redirect URI to https://your-domain.com/api/auth/callback/okta

OneLogin

  1. In the OneLogin Admin portal, add an OpenID Connect (OIDC) application
  2. Set the Redirect URI to https://your-domain.com/api/auth/callback/onelogin
  3. Under SSO, set the application type to Web so it is issued a client secret, and note the Client ID and Client Secret
If OneLogin sits behind another identity provider, for example a Cognito user pool that federates to it, point LangWatch at whichever one it talks to directly and let that one handle the hop. LangWatch only needs one OIDC issuer.

Any other OpenID Connect provider

Any provider that publishes an OpenID Connect discovery document and supports the authorization code flow with PKCE works without being named above: Keycloak, Authentik, Zitadel, Ping, JumpCloud, a self-hosted IdP, whatever you run.
  1. Register an OIDC client with your provider, with the authorization code flow and the openid, email and profile scopes
  2. Set its redirect URI to https://your-domain.com/api/auth/callback/oidc
Check the issuer is right by fetching its discovery document, which is exactly what LangWatch does at sign-in:
JSON back means the issuer is right. LangWatch then reads authorization_endpoint, token_endpoint and userinfo_endpoint from that document, so all three have to be there, and the client you registered has to allow the authorization code flow with PKCE.

Domain-to-Organization Mapping

For on-premises deployments with SSO, map email domains to organizations:
This ensures users with @yourcompany.com emails are automatically associated with the correct organization.

Migrating from Email/Password to SSO

  1. Enable SSO by setting the provider configuration above
  2. Flag existing email/password users for SSO migration:
  1. When flagged users next sign in via SSO, their accounts are automatically linked
Users keep their existing data, projects, and permissions after the SSO migration. The migration only changes their authentication method.
Last modified on August 15, 2026