もちろんです。Keycloakを使ったユーザー認証の認可コードフローについて、矢印($\rightarrow$)と番号を使って、ステップごとの流れをより明確に表現します。

🔑 Keycloak 認可コードフローの流れ

このフローは、主にユーザーのブラウザ(フロントチャネル)を介したやり取りと、サーバー間の直接通信(バックチャネル)に分かれます。


I. 認証リクエストの開始(ブラウザ経由)

ユーザーがアプリケーションの保護されたリソースへアクセスしようとするステップです。

  1. ユーザー $\rightarrow$ クライアントApp
    • 保護されたリソースへのアクセスを要求
  2. クライアントApp $\rightarrow$ Keycloak
    • ユーザーをKeycloakの認可エンドポイントへリダイレクト
    • (リクエスト内容:client_idresponse_type=coderedirect_uri など)
  3. Keycloak $\rightarrow$ ユーザー
    • Keycloakのログイン画面を表示

II. ユーザー認証とコード発行(ブラウザ経由)

Keycloakがユーザーの身元を確認し、一時的な「鍵」を発行するステップです。

  1. ユーザー $\rightarrow$ Keycloak
    • ユーザー名とパスワードを入力し、認証を試みる。
  2. Keycloak
    • 認証情報を検証
  3. Keycloak $\rightarrow$ クライアントApp (ブラウザ経由でリダイレクト)
    • 認証成功後、redirect_uriへリダイレクト
    • URLパラメータに認可コード (code) を付与。

III. トークンの交換(サーバー間通信:最も重要

クライアントサーバーが、ブラウザからは見えない安全な通信で、認可コードを本物のトークンに交換するステップです。

  1. クライアントApp (サーバーサイド) $\rightarrow$ Keycloak (トークンエンドポイント)
    • 認可コードとクライアントシークレット (client_secret) を含むPOSTリクエストを送信。
    • (リクエスト内容:grant_type=authorization_codecodeclient_secret
  2. Keycloak
    • 認可コードとclient_secret検証
  3. Keycloak $\rightarrow$ クライアントApp (サーバーサイド)
    • 検証成功後、以下のトークンセットを応答。
      • アクセストークン (Access Token)
      • IDトークン (ID Token)
      • リフレッシュトークン (Refresh Token)

IV. リソースへのアクセスと利用

クライアントアプリケーションが、取得したトークンを使ってAPIなどのリソースにアクセスするステップです。

  1. クライアントApp $\rightarrow$ API (リソースサーバー)
    • アクセストークンをHTTPヘッダー(Authorization: Bearer <token>)に含めて、APIへリクエスト
  2. API $\rightarrow$ Keycloak (または公開鍵)
    • 受け取ったアクセストークンの署名を検証
  3. API $\rightarrow$ クライアントApp
    • トークンが有効であれば、リクエストされたデータを応答。

このフローでは、機密情報であるトークンとクライアントシークレットが、ユーザーのブラウザを介さずにサーバー間でのみ交換されるため、高いセキュリティが保たれます。