0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenID Connectのnonceについて

0
Last updated at Posted at 2026-03-10

認可フローで利用されるnonceパラメータについて。

nonceとは何か

nonceもまたcode_challengeやstateとともに認可コードリクエストに含まれるパラメータです。
この値の用途は何なのでしょうか。
OAuth2.0には無くOIDCにのみ登場する値であるので守りたいのはID Tokenであることはなんとなく想像がつきます。

公式ドキュメント 曰く、

nonce
Client セッションと ID Token を紐づける文字列値. リプレイアタック防止のために用いられる. Authentication Request で指定されたままの値を ID Token に含める. ID Token に nonce が含まれる場合, Client は Authentication Request に含めた nonce 値が ID Token に含まれる nonce Claim Value と一致することを検証しなければならない (MUST). Authentication Request に nonce が含まれていた場合, Authorization Server は ID Token に Authentication Request で受け取ったそのままの Claim Value で nonce Claim を含めねばならない (MUST). Authorization Server は, 受け取った nonce に対して上記以外のなんらの処理も行うべきではない (SHOULD). nonce は大文字小文字を区別する文字列である.

  • IdPサーバーは認可リクエストに含まれるnonceをそのままIDTokenに格納しなくてはならない
  • 認可リクエストで送ったときのnonceとIDTokenに含まれるnonceが同じか検証しなくてはならない
    図解してみましょう。

nonceが一致すれば、ID Tokenが 自分の認可リクエストに対応するものであることを確認できます。

nonceが防ぐリプレイ攻撃

公式ドキュメント

nonce
Client セッションと ID Token を紐づける文字列値. リプレイアタック防止のために用いられる.

ここで述べられたリプレイ攻撃とは何でしょうか。これは「傍受した他人のIDトークンを利用すること」を意味します。
攻撃者の使うIDトークンが他人のものであってもIDトークン自体は正当であるため、IDトークンを利用した処理に成功してしまう可能性があります。

nonceが無い場合

nonceによる検証が無い場合、次のような攻撃が成立する可能性があります。

Client上でnonceを比較することによって、上記のような攻撃を防げることがわかります。

まとめ

OpenID Connectでは、ID Tokenの正当性を検証するためにnonceパラメータが利用されます。
この検証を行わない場合、他人のID Tokenを利用するリプレイ攻撃が成立してしまう可能性があります。
nonceの検証は、Clientの認証セッションとID Tokenを結び付けることにより攻撃を防ぐ役割を持っています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?