JSON 웹 토큰 확인 - Amazon Cognito

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

JSON 웹 토큰 확인

이러한 단계들은 사용자 풀 JSON 웹 토큰(JWT)의 확인 방법을 설명합니다.

Prerequisites

이 섹션의 작업은 라이브러리, SDK 또는 소프트웨어 프레임워크에서 이미 처리되었을 수 있습니다. 예를 들어 사용자 풀 토큰 처리 및 관리는 Amazon Cognito SDK. 마찬가지로, Mobile SDK for iOS 및 Android용 Mobile SDK 두 가지 조건이 충족되면 자동으로 ID를 새로 고치고 토큰에 액세스합니다. 유효한(만료되지 않은) 새로 고침 토큰이 있어야 하며, ID 및 액세스 토큰의 유효 기간은 최소 5분 이상이어야 합니다. SDK와 JavaScript, Android 및 iOS용 샘플 코드에 대한 자세한 내용은 Amazon Cognito 사용자 풀 SDK를 참조하십시오.

JSON 웹 토큰(JWT) 을 디코딩하고 확인하는 데 유용한 라이브러리가 많이 있습니다. 이러한 라이브러리는 서버 측 API 처리를 위해 토큰을 수동으로 처리해야 하는 경우 또는 다른 프로그래밍 언어를 사용하는 경우에 도움이 될 수 있습니다. JWT 토큰 작업을 위한 OpenID Foundation 라이브러리 목록을 참조하십시오.

단계 1. JWT 구조 확인

JSON 웹 토큰(JWT)은 다음 3개의 섹션이 포함되어 있습니다.

  1. 헤더

  2. : 페이로드

  3. 서명

11111111111.22222222222.33333333333

이러한 섹션은 base64url 문자열로 인코딩되며 점(.) 문자로 구분됩니다. JWT가 이 구조를 따르지 않는 경우 유효하지 않다고 간주하고 수락하지 마십시오.

단계 2. JWT 서명 검증

JWT 서명은 헤더와 페이로드의 해시된 조합입니다. Amazon Cognito 에서는 각 사용자 풀에 대해 두 쌍의 RSA 암호화 키를 생성합니다. 프라이빗 키 중 하나는 토큰 서명에 사용됩니다.

JWT 토큰의 서명을 확인하는 방법

  1. ID 토큰을 디코딩합니다.

    AWS Lambda을 사용하여 사용자 풀 JWT를 디코딩할 수 있습니다. 자세한 내용은 를 참조하십시오. 디코드 및 확인 Amazon Cognito 사용 중인 JWT 토큰 Lambda.

    또한 OpenID Foundation에는 JWT 토큰 작업을 위한 라이브러리 목록이 포함되어 있습니다.

  2. 로컬 키 ID(kid)을(를) 공공 어린이에게.

    1. 사용자 풀에 해당되는 퍼블릭 JSON 웹 키(JWK)를 다운로드하고 저장합니다. 이 키는 JSON 웹 키 집합(JWKS)의 일부로 사용이 가능합니다. 이 정보는 에서 찾을 수 있습니다.

      JWK 및 JWK 집합에 대한 자세한 내용은 JSON 웹 키(JWK)를 참조하십시오.

      참고

      웹 API에서 토큰을 처리할 수 있으려면 이 단계를 한 번 거쳐야 합니다. 이제 웹 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 웹 서명(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 웹 키를 검색하여 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 사용자 풀.

  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여야 합니다.

이제 토큰 내에 있는 클레임을 신뢰할 수 있습니다.