LoginSignup
5
6

More than 3 years have passed since last update.

IDトークン 検証方法 メモ

Last updated at Posted at 2020-12-26
  • Open ID Connect IDトークン検証方法についてメモする。

IDトークンとは

  • ユーザー認証情報を含んだ改竄検知用の署名付きトークンを指す。

    • JWT(JSON Web Token)形式でエンコードして表現される。
      • ピリオド(".")区切りのHeader部、Payload部、Signature部から構成される。
      • 各部位はBase64URLエンコードされる。
      • 署名生成には、RSA-SHA256などが用いられる。
    • ユーザー認証の結果、発行される。

IDトークン検証方法

  • クライアントは、以下の処理を行うことで、IDトークンの正当性を検証する必要がある。
    • 検証に失敗した場合、認証処理を中断し、エラー処理などを行う。

1. Base64デコード

  • 取得したIDトークンをBase64デコードする。

2. IDトークンをヘッダー部、ペイロード部、署名部へ"."で分割

3. トークンの復号

  • (暗号化されている場合、)OpenID Providerにクライアント登録した際に、利用した鍵とアルゴリズム情報を使用して、復号する。

4. JWT 署名検証

  • alg(署名アルゴリズム)ヘッダーパラメータを使用して、署名を検証する。
    • 検証には、issuerが発行した公開鍵を利用する。
    • 公開鍵の取得方法は、Header部に含まれるkid値を用いて、issuerが提供するエンドポイントからから対になるものを取得するパターンがある。
    • HS256HS512 のような MAC ベースのアルゴリズムを利用する場合、 aud (audience) Claim に含まれる client_id に対応する client_secret を署名の検証に利用する。

5.Issuer Identifier(ISS)クレーム検証

  • issがOpenID Provider(issuer)と一致するかを確認する。

    • iss
      • IDトークン発行者 (issuer) を識別するための識別子。
      • https:// で始まる URL (クエリー部とフラグメント部は含まない)。
      https://example.com
    

6.audience(aud)クレーム 検証

  • audと自身に発行されたクライアントID(client_id)が一致するかを確認する。
  • aud
    • 誰を対象として発行されたのかを示す識別子。
    • ID トークン発行をリクエストしたアプリケーションのクライアント ID 。

7. expiration time(exp)クレーム 検証

  • expクレームが現在時刻より未来であることを確認する。
  • exp
    • IDトークン の有効期限。
    • Unix エポック からの経過秒数で表現する。

8. nonceクレーム 検証

  • (認証リクエストにnonceが付与されている場合、)nonceクレームの値と認証リクエスト時に指定した値が一致することを確認する。
  • nonce
    • 主にリプレイアタック防止目的の文字列。
    • issuerは認証リクエストに付与された値をそのままクレームに埋め込む。

9. Authentication Context Class Reference(acr) クレーム 検証

  • acrクレームの値とクライアント側で定義された認証コンテキストの値が一致することを確認する。
  • acr
    • ユーザー認証が満たした認証コンテキスト(パスワード認証した、などどのように認証したかを示す情報)。

10. auth_timeクレーム 検証

  • auth_timeクレームが最新のユーザー認証時刻から指定時間以上経過していないことを確認する。
  • auth_time
    • ユーザーが認証された時刻。

参考情報

5
6
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
5
6