Skip to content

feat(auth): authentik OIDC + admin SSO グループ同期#11

Open
Mikuto0831 wants to merge 3 commits into
mainfrom
feat/authentik-admin-sso
Open

feat(auth): authentik OIDC + admin SSO グループ同期#11
Mikuto0831 wants to merge 3 commits into
mainfrom
feat/authentik-admin-sso

Conversation

@Mikuto0831
Copy link
Copy Markdown
Contributor

Summary

  • authentik を OIDC プロバイダーとして追加(AUTHENTIK_CLIENT_ID 等の env var で有効化)
  • OIDCClaims.Groups フィールドを追加し、ID Token の groups クレームを抽出
  • ADMIN_GROUPS 環境変数で admin グループ名を指定するとログイン時にロールを自動同期
  • UserRepository.UpsertWithIdentityroleHint 引数を追加

admin SSO の動作フロー

authentik グループ "dailycoding-admins" に所属
      ↓ ログイン
ID Token に groups: ["dailycoding-admins"] が含まれる
      ↓ verifier.Verify()
OIDCClaims.Groups = ["dailycoding-admins"]
      ↓ AuthUsecase.resolveRoleHint()
ADMIN_GROUPS=dailycoding-admins → roleHint = "admin"
      ↓ UpsertWithIdentity()
users.role = 'admin' に更新

ADMIN_GROUPS 未設定のときはロールを変更しない(従来通り手動 DB UPDATE で昇格可能)。

authentik 側の設定手順

  1. authentik 管理画面 → Applications → Providers で OAuth2/OIDC Provider を作成
  2. Client ID / Secret を控え、Redirect URI に https://dailycoding.lcn.ad.jp/api/auth/authentik/callback を登録
  3. Provider → Edit → Advanced Protocol Settings → Scopesgroups Property Mapping を追加
    (これにより ID Token に groups クレームが含まれるようになる)
  4. バックエンドの .env.prod に追記:
    AUTHENTIK_CLIENT_ID=<client_id>
    AUTHENTIK_CLIENT_SECRET=<secret>
    AUTHENTIK_ISSUER=https://authentik.lcn.ad.jp/application/o/<app-slug>/
    AUTHENTIK_CALLBACK_URL=https://dailycoding.lcn.ad.jp/api/auth/authentik/callback
    ADMIN_GROUPS=dailycoding-admins
    

Test plan

  • authentik でログインし /api/auth/me に role が返ること
  • admin グループのユーザーがログイン後 role = "admin" になること
  • admin グループから外したユーザーが次のログイン後 role = "student" に戻ること
  • ADMIN_GROUPS 未設定時に既存ユーザーのロールが変化しないこと
  • Google / Keycloak など groups クレームを持たないプロバイダーで従来通り動作すること

🤖 Generated with Claude Code

Mikuto0831 and others added 3 commits April 20, 2026 15:27
- authentik を OIDC プロバイダーとして追加 (AUTHENTIK_CLIENT_ID 等の env var で有効化)
- OIDCClaims に Groups フィールドを追加 (ID Token の groups クレームを抽出)
- ADMIN_GROUPS 環境変数でグループ名を指定すると、ログイン時に自動でロールを同期:
    グループ一致 → role = admin / 不一致 → role = student
  未設定のときは従来通りロールを変更しない (手動 DB UPDATE で昇格)
- UserRepository.UpsertWithIdentity に roleHint を追加
  既存ユーザーと新規ユーザーの両方でロールを上書き可能に

authentik の設定手順:
  1. Provider に OAuth2/OIDC を作成し Client ID/Secret を控える
  2. Scopes に groups マッピングを追加 (Property Mapping で groups クレームを発行)
  3. ADMIN_GROUPS に authentik 上の admin グループ名を設定

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- AUTH_BYPASS=true のセクションを削除し、デフォルト false であることを明記
- 管理者登録方法を 2 つに整理:
    A. DB 直接 UPDATE(初回・手動セットアップ向け)
    B. authentik グループによる自動同期(本番環境向け)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <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