コラム Claude Code入門 更新:

Claude CodeでOAuth2・OpenID Connectを実装する方法!認証基盤を安全に構築する手順

Claude CodeでOAuth2・OpenID Connectを実装する方法!認証基盤を安全に構築する手順
目次 (20項目)
  1. 1. はじめに
  2. 2. 目次
  3. 3. 1. OAuth2とOpenID Connectの基礎
  4. 概念の整理と実装の相談
  5. フローの選択
  6. 4. 2. ソーシャルログインの実装
  7. NextAuth.jsでのマルチプロバイダー実装
  8. バックエンドAPIでのOAuth2実装(Node.js)
  9. 5. 3. PKCEの実装
  10. SPAでのPKCE実装
  11. 6. 4. 自社IdPの構築(Keycloak)
  12. Keycloakの設定
  13. 7. 5. JWTの安全な実装
  14. アクセストークンとリフレッシュトークンの実装
  15. 8. 6. セキュリティ強化
  16. OAuth2のセキュリティチェック
  17. 9. 7. マルチプロバイダー対応
  18. 統一認証レイヤーの設計
  19. 10. 8. まとめ
  20. 11. よくある質問(FAQ)

はじめに

「OAuth2とOpenID Connectの違いがわからない」

「GoogleやGitHubのソーシャルログインを安全に実装したい」

「PKCEって何?実装が必要なの?」

認証は多くのWebアプリケーションで必要ですが、OAuth2・OpenID Connectの仕様は複雑で、誤った実装がセキュリティリスクになります。Claude Codeを使えば、仕様の理解から安全な実装まで体系的にサポートできます。

目次

  1. OAuth2とOpenID Connectの基礎
  2. ソーシャルログインの実装
  3. PKCEの実装
  4. 自社IdPの構築(Keycloak)
  5. JWTの安全な実装
  6. セキュリティ強化
  7. マルチプロバイダー対応
  8. まとめ

1. OAuth2とOpenID Connectの基礎

概念の整理と実装の相談

> OAuth2とOpenID Connectの違いを説明してください。
  また、以下のユースケースにはどちらが適切か教えてください:

  1. Googleアカウントでログインできるようにしたい
  2. サードパーティアプリに自社APIへのアクセスを許可したい
  3. シングルサインオン(SSO)を実装したい

  それぞれのフロー(Authorization Code・Client Credentials・
  Implicit・Device Code)の使い分けも教えてください。

フローの選択

> このWebアプリケーションに最適なOAuth2フローを選択して実装してください。

  アプリ情報:
  - Next.js SPAフロントエンド
  - Node.js APIバックエンド
  - モバイルアプリ(React Native)も同じAPIを使用

  それぞれに適したフローと、セキュリティ上の考慮事項を説明してください。

2. ソーシャルログインの実装

NextAuth.jsでのマルチプロバイダー実装

> NextAuth.jsを使って以下のソーシャルログインを実装してください。

  プロバイダー:
  - Google(OpenID Connect)
  - GitHub(OAuth2)
  - Microsoft(Azure AD)
  - LINE(日本向け)

  要件:
  - ログイン後のセッション管理(JWTセッション)
  - ユーザー情報のデータベース保存(Prisma)
  - 既存アカウントとのメールアドレス連携
  - ログアウト時のセッション完全無効化

バックエンドAPIでのOAuth2実装(Node.js)

> Express + Passportを使ってOAuth2認証を実装してください。

  実装内容:
  - passport-google-oauth20の設定
  - callback URLの処理
  - ユーザーのファーストログイン・リピートログインの処理
  - セッションとJWTの使い分け(セッションはOAuth用・JWTはAPI用)
  - CSRF対策(state parameter)

3. PKCEの実装

SPAでのPKCE実装

> SPAアプリケーションでPKCE(Proof Key for Code Exchange)を
  実装してください。

  実装の流れ:
  1. code_verifierをランダム生成
  2. code_challengeを計算(S256メソッド)
  3. 認証リクエストにcode_challengeを含める
  4. コールバックでcode_verifierを使ってトークン交換

  なぜSPAでPKCEが必要かも説明してください。
  TypeScriptで実装してください。

4. 自社IdPの構築(Keycloak)

Keycloakの設定

> Docker ComposeでKeycloakを構築して、
  アプリケーションとの連携を設定してください。

  設定内容:
  - Realmの作成・設定
  - Clientの設定(フロントエンド・バックエンドAPI)
  - ユーザーフェデレーション(既存のPostgreSQLユーザーテーブル連携)
  - カスタムログインページのテーマ適用
  - MFAの設定(TOTP)
  - ロールとグループの設計

  本番環境向けの高可用性設定も含めてください。

5. JWTの安全な実装

アクセストークンとリフレッシュトークンの実装

> JWTを使ったアクセストークン・リフレッシュトークンの
  安全な実装をしてください。

  設計:
  - アクセストークン:有効期限15分・RS256署名
  - リフレッシュトークン:有効期限30日・Secure HttpOnly Cookie保存
  - リフレッシュトークンローテーション
  - ファミリー検出(盗まれたトークンの無効化)

  リフレッシュトークンはデータベースで管理してください。
  トークンのブラックリスト機能も実装してください。

6. セキュリティ強化

OAuth2のセキュリティチェック

> このOAuth2実装のセキュリティ診断を実施してください。

  チェック項目(OAuth2 Security Best Practices RFC 9700準拠):
  - state parameterのCSRF対策
  - PKCEの使用
  - redirect_uriの完全一致検証
  - code・tokenの再利用防止
  - トークンのaudience検証
  - 短いアクセストークン有効期限

  問題があれば修正してください。

7. マルチプロバイダー対応

統一認証レイヤーの設計

> 複数のOAuth2プロバイダーを統一的に扱う
  認証レイヤーを設計・実装してください。

  要件:
  - Google・GitHub・MicrosoftのOAuth2
  - メールアドレスとパスワード認証との併用
  - 同じメールアドレスで複数プロバイダーを連携
  - プロバイダー切り替え時のアカウントマージ

  ユーザーテーブルの設計も含めてください。

8. まとめ

Claude CodeでのOAuth2・OIDC実装の効率化ポイント:

  • フロー選択の判断を相談できる
  • PKCEの実装を正確にサポート
  • セキュリティベストプラクティスへの準拠チェック
  • Keycloak等のIdP設定を自動化

認証実装の重要なポイント:

  • SPAでは必ずPKCEを使用する
  • リフレッシュトークンはHttpOnly Cookieで保存する
  • state parameterのCSRF対策を省略しない
  • JWTの署名アルゴリズムをRSAにする(共有鍵のHS256は避ける)

次回の第46回:メール配信システムを構築する方法では、トランザクションメールからニュースレターまで解説します。

よくある質問(FAQ)

Q. OAuth2とSAMLの違いは何ですか?

A. SAMLはXMLベースの古い認証連携プロトコルで、主に企業のSSO(エンタープライズ向け)で使われます。OAuth2はJSON/RESTベースでモダンなWeb・モバイルアプリ向けです。Claude Codeに「エンタープライズのSAML連携もOAuth2で対応できますか?」と相談することで、SAML→OAuth2ブリッジの実装も相談できます。

この記事はClaude Code入門シリーズ(第5部)の第45回です。← 第44回:Kubernetes第46回:メール配信システム →

ご質問はお問い合わせページからお気軽にどうぞ。

著者:R-LLM 開発者

フォロー

Webエンジニアとして10年以上のキャリアがあり、現在はWordPressとLLM(大規模言語モデル)の連携、および生成AIを活用した課題解決のための開発に日々取り組んでいます。

私の信条は、クライアントに寄り添った伴走支援と、最後まで責任を持ってやり遂げる「遂行力」です。これまでの膨大なトライ&エラーの蓄積により、自身の領域内であれば不具合も迅速に解決できる現場の知見を積み上げてきました。

このブログでは、一人のエンジニアとして私自身がAI技術に抱いている純粋な興味をベースに、日々の探求プロセスを発信しています。

生成AILLMをどのように実務に組み込み、価値へ繋げていくか。自身の検証結果だけでなく、実務者としての視点に基づいた「考察や推察」も含めて共有することで、同じように試行錯誤を続ける方々と知見を繋げていければと考えています。

関連記事

SHARE Xでシェア
← 前の投稿
投稿一覧に戻る
次の投稿 →