OIDC / OAuth 2.0
← シミュレーター一覧

認可コード + PKCE フロー

認可コードフローに PKCE(Proof Key for Code Exchange)を追加したフロー。SPAやネイティブアプリなど、client_secret を安全に保管できない環境で使用します。現在最も推奨されるフローです。

ステップ 1 / 714%
ブラウザ
クライアント
認可サーバー
リソースサーバー
1. PKCE パラメータ生成
>2. 認可リクエスト送信(code_challenge付き)
<3. ユーザー認証・同意
<4. 認可コードでリダイレクト
>5. トークンリクエスト(code_verifier付き)
<6. トークンレスポンス
>7. リソースアクセス
1

PKCE パラメータ生成

クライアントクライアント

クライアントが code_verifier(ランダム文字列)を生成し、そのSHA-256ハッシュから code_challenge を計算します。

リクエスト概要

code_verifier と code_challenge の生成

セキュリティ注意事項
  • !code_verifier は43〜128文字のランダム文字列
  • !code_challenge = BASE64URL(SHA256(code_verifier))
  • !S256メソッドを必ず使用する(plainは非推奨)
GENERATE(ローカル処理)
Body
code_verifier = dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
code_challenge = E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
code_challenge_method = S256

使用すべき場面

  • -SPA(シングルページアプリケーション)
  • -モバイル/ネイティブアプリケーション
  • -client_secret を安全に保管できないパブリッククライアント
  • -現在最も推奨されるフロー(RFC 7636、OAuth 2.1)

使用すべきでない場面

  • -サーバー間通信 → クライアントクレデンシャルフローを使用
  • -入力デバイスがないIoT → デバイス認可フローを使用

セキュリティ考慮事項

  • !code_challenge_method は必ず S256 を使用する
  • !code_verifier は暗号論的に安全な乱数で生成する
  • !code_verifier はリクエストごとに新規生成する
  • !インプリシットフローの代わりにこのフローを使用すること
  • !state パラメータも併用して CSRF を防止する