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

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

JSON ウェブトークンの検証

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

Prerequisites

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

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

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

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

  1. ヘッダー

  2. : Payload

  3. 署名

11111111111.22222222222.33333333333

これらのセクションはbase64url文字列としてエンコードされ、ドット(.)文字で区切られています。JWTがこの構造に適合しない場合は、その構造は無効であると見なし、受け入れないでください。

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

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

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

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

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

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

  2. ローカルキーID(kid)を一般の子どもに渡す。

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

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

      注記

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

      これはサンプルです jwks.json ファイル:

      { "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 Web署名(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 心に残る体験です

  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 ユーザープール。

  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 になります。

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