Skip to content

feat(sso): OSS gated surface for enterprise SSO (OIDC) (#32)#1303

Open
dolho wants to merge 2 commits into
feat/5-2fa-totpfrom
feature/sso-oidc
Open

feat(sso): OSS gated surface for enterprise SSO (OIDC) (#32)#1303
dolho wants to merge 2 commits into
feat/5-2fa-totpfrom
feature/sso-oidc

Conversation

@dolho

@dolho dolho commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

What

OSS-side, entitlement-gated surface for enterprise SSO via OIDC. All SSO logic lives in the private submodule (companion: trinity-enterprise#36); OSS carries only the gated UI + the submodule bump.

Related to trinity-enterprise#32.

Changes

  • Login.vue — "Sign in with <IdP>" buttons, shown only when the sso feature is entitled and a provider is enabled; handles the OIDC callback fragment (/login#sso=ok|mfa|error) and reuses the existing 2FA challenge UI when the IdP login still needs a local second factor.
  • stores/auth.jscompleteSsoLogin() (reuses _finalizeLogin / _setMfaChallenge) + fetchSsoProviders() (empty in OSS-only builds — endpoint 404s).
  • Settings.vue — admin-gated SSO tab → new SsoPanel.vue (provider CRUD + connectivity test + policy). Gated by enterpriseStore.isEntitled('sso'), same pattern as the 2FA tab.
  • Submodule bump to the SSO module commit.
  • docs — architecture enterprise-modules row + requirements §40.

Why no backend/dep changes

python-jose + httpx are already in the backend image, and the mint (create_access_token), whitelist/default_role (#314), and mfa_gate seams already exist — so OSS needs no Python or Dockerfile change.

Notes

  • Stacked on feat/5-2fa-totp (reuses the OSS mfa_gate + 2FA challenge surface) — base is the 2FA branch so the diff is SSO-only. Retarget to dev once 2FA lands; the submodule pointer also settles once both 2FA branches merge.
  • Frontend build/e2e validated in CI (ui label).

🤖 Generated with Claude Code

dolho and others added 2 commits June 22, 2026 13:30
Companion to trinity-enterprise#36. OSS carries only the entitlement-gated
surface; all SSO logic lives in the private submodule.

- Login.vue: "Sign in with <IdP>" buttons (shown only when the `sso` feature is
  entitled and a provider is enabled), plus OIDC callback-fragment handling
  (`/login#sso=ok|mfa|error`) — reuses the existing 2FA challenge UI when the
  IdP login still requires a local second factor.
- stores/auth.js: completeSsoLogin() (reuses _finalizeLogin / _setMfaChallenge)
  + fetchSsoProviders() (empty in OSS-only builds — endpoint 404s).
- Settings.vue: admin-gated "SSO" tab → SsoPanel.vue (provider CRUD + test +
  policy). Gated by enterpriseStore.isEntitled('sso'), same as the 2FA tab.
- Bump enterprise submodule to the SSO module commit.
- docs: architecture enterprise-modules row + requirements §40 (SSO/OIDC).

No new backend dependency (python-jose + httpx already in the image) and no
OSS Python changes — the mint/whitelist/mfa seams already exist.

Stacked on feat/5-2fa-totp (reuses the OSS mfa_gate + 2FA challenge surface).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pulls in the email_verified / issuer-pinning / login-CSRF fixes
(trinity-enterprise 87c8f97). OSS gated surface unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

1 participant