Skip to content

Add multi-provider SSO support and dedicated Authentication admin tab#332

Merged
vincentmakes merged 7 commits intomainfrom
claude/add-sso-providers-dnNtb
Feb 27, 2026
Merged

Add multi-provider SSO support and dedicated Authentication admin tab#332
vincentmakes merged 7 commits intomainfrom
claude/add-sso-providers-dnNtb

Conversation

@vincentmakes
Copy link
Owner

Support Google Workspace, Okta, and Generic OIDC identity providers in addition to the existing Microsoft Entra ID. SSO and self-registration settings are moved from the General tab to a new dedicated Authentication tab in admin settings. The login page dynamically shows the correct provider icon and name based on the configured SSO provider.

Backend: Provider-specific token exchange, JWKS validation, and OpenID Connect discovery for Generic OIDC. Google hosted domain restriction and Okta domain configuration. Backward compatible — existing Microsoft configs continue to work without changes.

https://claude.ai/code/session_01NUuWfxYPLtSK7VsetUMh4S

Summary

Changes

Test Plan

  • All CI checks pass (backend lint, backend tests, frontend lint, frontend build, frontend tests)
  • Manually tested the affected feature
  • Added/updated tests for new or changed behavior

Checklist

  • My changes follow the conventions in CLAUDE.md
  • I added permission checks to any new mutating endpoints
  • I created an Alembic migration for any schema changes
  • I did not introduce hardcoded card types or fields (metamodel is data-driven)
  • I used async def for all new route handlers and DB operations
  • I did not expose sensitive fields (password hashes, encrypted secrets) in API responses
  • Screenshots attached for UI changes (if applicable)

Support Google Workspace, Okta, and Generic OIDC identity providers in
addition to the existing Microsoft Entra ID. SSO and self-registration
settings are moved from the General tab to a new dedicated Authentication
tab in admin settings. The login page dynamically shows the correct
provider icon and name based on the configured SSO provider.

Backend: Provider-specific token exchange, JWKS validation, and OpenID
Connect discovery for Generic OIDC. Google hosted domain restriction
and Okta domain configuration. Backward compatible — existing Microsoft
configs continue to work without changes.

https://claude.ai/code/session_01NUuWfxYPLtSK7VsetUMh4S
Resolve merge conflict in CHANGELOG.md (combine SSO and AI provider
entries). Update LoginPage test mocks to include provider and
provider_name fields so the SSO button text matches expectations.

https://claude.ai/code/session_01NUuWfxYPLtSK7VsetUMh4S
…endpoints

The auth cookie was hardcoding Secure=True based on ENVIRONMENT!=development,
which broke login on HTTP deployments (e.g. local networks without TLS). The
browser would refuse to store/send the Secure cookie over HTTP, causing every
/auth/me call after login to return 401.

Now detects HTTPS via X-Forwarded-Proto header (set by reverse proxies/TLS
terminators) instead of the ENVIRONMENT variable.

Also adds optional manual OIDC endpoint configuration (authorization_endpoint,
token_endpoint, jwks_uri) as fallback when the backend Docker container cannot
reach the provider's /.well-known/openid-configuration discovery document.

https://claude.ai/code/session_01NUuWfxYPLtSK7VsetUMh4S
- Accept multiple JWT signing algorithms (RS256, ES256, PS256, etc.)
  instead of only RS256, since providers like Authentik may use others
- Auto-retry id_token verification with opposite trailing-slash issuer
  variant to handle providers that add/omit trailing slashes
- Return specific error messages for issuer mismatch, audience mismatch,
  token exchange failures, and network connectivity issues
- Log detailed diagnostic info (URLs, status codes, error descriptions)
  for easier debugging of SSO integration issues
- Add explicit ConnectError handling for Docker networking failures

https://claude.ai/code/session_01NUuWfxYPLtSK7VsetUMh4S
…stic emails

Admins can now change a user's authentication method (Local/SSO) in the
edit dialog, enabling existing local accounts to be converted to SSO.
The SSO callback will automatically link the account on next SSO login.
Invitation emails now use the actual configured provider name instead of
hardcoded references. The ssoHint in invite dialog is also updated to
be provider-agnostic across all 7 locales.

https://claude.ai/code/session_01NUuWfxYPLtSK7VsetUMh4S
Expands both EN and ES manuals with:
- SSO login instructions in section 2 (Accessing the Platform)
- Detailed user invitation workflow in section 11.2 (Users & Roles)
- Instructions for linking existing local accounts to SSO
- New section 11.3 (Authentication & SSO) covering provider
  configuration for Microsoft, Google, Okta, and Generic OIDC,
  including manual OIDC endpoint setup
- Updated table of contents with subsection links
- Version bumped to 0.22.1

https://claude.ai/code/session_01NUuWfxYPLtSK7VsetUMh4S
@vincentmakes vincentmakes merged commit 377cf43 into main Feb 27, 2026
14 checks passed
@vincentmakes vincentmakes deleted the claude/add-sso-providers-dnNtb branch February 27, 2026 20:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants