JSON ウェブトークンの検証 - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

JSON ウェブトークンの検証

これらのステップでは、ユーザープールの JSON ウェブトークン (JWT) について説明します。

Prerequisites

このセクションのタスクは、ライブラリ、SDK、ソフトウェアフレームワークで既に処理されている可能性があります。たとえば、ユーザープールトークンの処理や管理は、Amazon Cognito SDK を使用してクライアント側で行われます。同様に、iOS 用 Mobile SDK と Android 用 Mobile SDK は、次の 2 つの条件が満たされると、ID とアクセストークンを自動的に更新します。有効な (期限が切れていない) 更新トークンが存在し、アクセストークンの有効時間が 5 分以上残っている必要があります。SDK、JavaScript のサンプルコード、Android、および iOS については、Amazon Cognito ユーザープール SDK

JSON Web トークン (JWT) をデコードして検証するには、ライブラリが多数あります。このようなライブラリは、サーバー側の API 処理用にトークンを手動で処理する必要がある場合や、他のプログラミング言語を使用している場合に役立ちます。「JWT トークンで使用するライブラリの OpenID Foundation リスト」を参照してください。

ステップ 1: JWT の構造を確認する

JSON ウェブトークン (JWT) は、次の 3 つのセクションで構成されます。

  1. ヘッダー

  2. Payload

  3. 署名

11111111111.22222222222.33333333333

これらのセクションは base64 url 文字列でエンコードされ、ドット (.) 文字で区切られています。JWT がこの構造に準拠していない場合は、無効とみなし、使用しないでください。

ステップ 2: JWT 署名を検証する

JWT 署名は、ヘッダーとペイロードのハッシュされた組み合わせです。Amazon Cognito では、ユーザープールごとに 2 組の RSA 暗号化キーが生成されます。プライベートキーの 1 つは、トークンの署名に使用されます。

JWT トークンの署名を確認するには

  1. ID トークンをデコードします。

    AWS Lambda を使用して、ユーザープール JWT をデコードできます。詳細については、「」を参照してください。Lambda を使用した Amazon Cognito JWT トークンのデコードと検証

    また、OpenID Foundation では、JWT トークンで使用するライブラリのリストが管理されます

  2. ローカルキー ID (kid) パブリックの kid.

    1. ユーザープールの対応するパブリック JSON ウェブキー (JWK) をダウンロードして保存します。JSON ウェブキーセット (JWKS) の一部として使用できます。https://cognito-idp で検索できます。 {region} .amazonaws.com/ {userPoolId} /.well-known/jwks.json.

      JWK および JWK セットの詳細については、「JSON ウェブキー (JWK)」を参照してください。

      注記

      これは、Web API でトークンを処理する前の 1 度限りのステップです。ウェブ API に対して ID トークンまたはアクセストークンを使用する度に、次のステップを実行できます。

      これはサンプルです。jwks.jsonfile:

      { "keys": [{ "kid": "1234example=", "alg": "RS256", "kty": "RSA", "e": "AQAB", "n": "1234567890", "use": "sig" }, { "kid": "5678example=", "alg": "RS256", "kty": "RSA", "e": "AQAB", "n": "987654321", "use": "sig" }] }
      キー ID (kid)

      -kidは、トークンの JSON ウェブ署名 (JWS) を保護するために使用されたキーを示すヒントです。

      アルゴリズム (alg)

      alg ヘッダーパラメータは、ID トークンを保護する暗号化アルゴリズムを表します。ユーザープールでは、SHA-256 を使用した RSA 署名である、暗号化アルゴリズム (RS256) が使用されています。RSA の詳細については、「」を参照してください。RSA 暗号化

      キーのタイプ (kty)

      kty パラメータは、この例の「RSA」など、キーで使用する暗号化アルゴリズムファミリーを識別します。

      RSA 指数 (e)

      e パラメータには、RSA パブリックキーの指数値が含まれます。Base64urlUInt でエンコードされた値として表されます。

      RSA 係数 (n)

      n パラメータには、RSA パブリックキーのモジュラス値が含まれます。Base64urlUInt でエンコードされた値として表されます。

      以下を使用します (use)

      use パラメータは、パブリックキーの用途を表します。この例では、usesigは署名を表します。

    2. パブリック JSON Web キーで、kidと一致するkidあなたのJWTの

  3. JWT ライブラリを使用して署名を検証するには、このパブリックキーを使用します。まず、JWK を PEM 形式に変換する必要がある場合があります。この例では、JWT および JWK を取得し、Node.js ライブラリ、jsonwebtoken を使用して JWT 署名を検証します。

    Node.js
    var jwt = require('jsonwebtoken'); var jwkToPem = require('jwk-to-pem'); var pem = jwkToPem(jwk); jwt.verify(token, pem, { algorithms: ['RS256'] }, function(err, decodedToken) { });

ステップ 3: クレームを検証する

JWT クレームを検証するには

  1. トークンの有効期限が切れていないことを確認します。

  2. 対象者 (aud) のクレームが、Amazon Cognito ユーザープールで作成されたアプリクライアント ID と一致する必要があります。

  3. 発行者 (iss) のクレームは、ユーザープールと一致する必要があります。たとえば、ユーザープールはus-east-1リージョンには、次のものがありますiss値:

    https://cognito-idp.us-east-1.amazonaws.com/<userpoolID>.

  4. token_use クレームを確認します。

    • ウェブ API でアクセストークンのみを受け入れている場合、その値は access にする必要があります。

    • ID トークンのみを使用している場合、その値は id にする必要があります。

    • ID とアクセストークンのいずれも使用している場合、token_use クレームは、id または access になります。

トークン内でクレームを信頼できるようになりました。