情報処理技術者試験解説チャンネル

応用情報技術者試験をはじめとする情報処理技術者試験の午後問題では、「過去10年分を確実に理解しているか」が合格ラインを左右するといわれています。当チャンネルでは、その10年分の午後問題を要点だけに絞り、約10分のコンパクトな解説としてまとめました。限られた時間でも効率よく学習を進められる構成です。

OIDC における `nonce` と `state` の具体的な送信データ

                    ここでは、OIDC の認可リクエスト・レスポンスにおいて `nonce` と `state` がどのようにやり取りされるのか、**具体的な送信データ** を示しながら説明します。

🔹 認可リクエスト(Authorization Request)

OIDC クライアント(RP)は、ユーザーを認証するために認可エンドポイントにリクエストを送ります。
このとき、noncestate をランダムに生成し、URL パラメータとして付加します。

認可リクエストの例

GET https://auth.example.com/authorize?
  response_type=code
  &client_id=your-client-id
  &redirect_uri=https://your-app.com/callback
  &scope=openid profile email
  &state=xyzABC123456
  &nonce=abcdEFG789

各パラメータの説明

パラメータ 説明
response_type=code 認可コードフローを指定
client_id=your-client-id クライアント ID
redirect_uri=https://your-app.com/callback 認可コードのリダイレクト先
scope=openid profile email 要求するスコープ
state=xyzABC123456 CSRF 防止用のランダムな値
nonce=abcdEFG789 ID Tokenリプレイ攻撃を防ぐためのランダムな値

🔹 認可レスポンス(Authorization Response)

ユーザーが認証を完了すると、OIDC プロバイダ(OP)はクライアントの redirect_uri にレスポンスをリダイレクトします。
このとき、リクエスト時に送信した state をそのまま返します。

認可レスポンスの例

HTTP/1.1 302 Found
Location: https://your-app.com/callback?
  code=SplxlOBeZQQYbYS6WxSbIA
  &state=xyzABC123456

各パラメータの説明

パラメータ 説明
code=SplxlOBeZQQYbYS6WxSbIA 認可コード(後でトークンを取得するために使用)
state=xyzABC123456 認可リクエスト時の state(照合用)

クライアントは state の値を検証し、一致しなければレスポンスを拒否します。


🔹 トークンリクエスト(Token Request)

クライアント(RP)は、認可コードを使用してトークンエンドポイントにリクエストを送り、アクセストークンと ID トークンを取得します。

トークンリクエストの例

POST https://auth.example.com/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https://your-app.com/callback
&client_id=your-client-id
&client_secret=your-client-secret

🔹 トークンレスポンス(Token Response)

OP は、アクセストークンと ID Token をクライアントに返します。

トークンレスポンスの例

{
  "access_token": "SlAV32hkKG",
  "token_type": "Bearer",
  "expires_in": 3600,
  "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjEiLCJ0..."
}

この id_tokennonce が含まれています。


🔹 ID トークンの内容

ID トークンは JWT(JSON Web Token) 形式で、デコードすると次のような JSON データが含まれます。

id_tokenペイロード(デコード後)

{
  "iss": "https://auth.example.com",
  "sub": "1234567890",
  "aud": "your-client-id",
  "exp": 1718154820,
  "iat": 1718151220,
  "nonce": "abcdEFG789"
}

各パラメータの説明

パラメータ 説明
iss ID トークンの発行元(OIDC プロバイダの URL)
sub ユーザー ID(一意の識別子)
aud クライアント ID(このトークンが誰向けか)
exp 有効期限(UNIX 時間)
iat 発行時刻(UNIX 時間)
nonce 認可リクエスト時に送信した nonce

クライアントは nonce を検証し、一致しなければ ID Token を拒否します。


🔹 まとめ

パラメータ 送信先 戻り先 役割
state 認可リクエスト 認可レスポンス CSRF 防止、リクエストとレスポンスの関連付け
nonce 認可リクエスト ID トーク ID Tokenリプレイ攻撃防止

state は URL に含まれ、CSRF 攻撃を防ぐために使われます。
nonceID Token に埋め込まれ、リプレイ攻撃を防ぐために使われます。

OIDC の実装では、statenonce の正しい取り扱いがセキュリティ上の重要なポイントとなります。