Skip to content

ebinase/oidc-sample

Repository files navigation

oidc-sample

ログイン画面スクリーンショット

Next.jsを使用したOpenID Connect (OIDC) の認可コードフロー+PKCEの学習目的のサンプル実装。

IdPとの連携から state / nonce / code_verifier(PKCE) の管理、id_token の署名検証まで、OIDC の基本的な構成要素を最小限のライブラリで構築しています。

🔰 注意事項

  • このリポジトリは学習用途専用であり本番環境での利用は非推奨です。
  • 想定実行環境はローカル環境のみです

🌐 エンドポイント一覧

エンドポイント 説明
/ トップページ。ログイン/ログアウトボタンを表示
/api/auth/login OIDCプロバイダの認可エンドポイントにリダイレクト
/api/auth/callback OIDCプロバイダから認可コードを受け取りIDトークンと交換、ログイン処理
/api/auth/logout セッションを破棄し、OIDCプロバイダのログアウトエンドポイントにリダイレクト

✅ 実装済み機能の概要

機能 状態 説明 補足
認可コードフロー OIDC準拠のフロー。code + PKCE を実装 -
PKCE (code_verifier) code_challenge生成 + code_verifier保存 pkce-challenge
state 検証 CSRF対策としてランダム文字列を保存・検証 -
nonce 検証 IDトークンのリプレイ攻撃防止に使用 -
id_token の署名検証 JWKから公開鍵を取得して署名検証 jose
claim 検証 iss, aud, exp, nonce などを検証 jose + 手動検証
セッション管理 Cookieベースでログイン状態を保持 iron-session
ユーザー登録・照合 subとアカウントを紐づけ。未登録の場合はDBに追加 セッションを擬似DBとして使用
/userinfo 呼び出し ⬜️ 未実装(IDトークンで十分なため省略) -
トークン revocation ⬜️ 未実装 -

🧱 技術スタック


🚀 セットアップ

git clone https://github.com/ebinase/oidc-sample.git
cd oidc-sample
npm install

環境変数の設定

.env.example.env.local にリネームし、以下の手順で環境変数を設定する

  • OIDCプロバイダへのアプリケーションの登録
    • OIDCプロバイダにアプリケーションを登録し、リダイレクトURIをhttp://localhost:3000/api/auth/callbackに設定
    • クライアントIDとシークレットを取得
  • OIDCプロバイダのhttps://your-oidc-provider/.well-known/openid-configuration から設定を取得
    • authorization_endpointtoken_endpointjwks_uri
  • SESSION_PASSWORD
    • セッションの暗号化に使用するパスワードを設定

ローカル環境の起動

npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev

参考文献

About

OIDCのNext.jsでのサンプル実装

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published