

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 자격 증명(ID) 토큰 이해
<a name="amazon-cognito-user-pools-using-the-id-token"></a>

ID 토큰은 `name`, `email`, `phone_number` 등 인증된 사용자의 자격 증명에 대한 클레임이 포함된 [JSON 웹 토큰(JWT)](https://tools.ietf.org/html/rfc7519)입니다. 애플리케이션 내에서 이 자격 증명 정보를 사용할 수 있습니다. 리소스 서버 또는 서버 애플리케이션에 사용자를 인증하는 경우에도 ID 토큰을 사용할 수 있습니다. 애플리케이션 외부에서 웹 API 작업에 ID 토큰을 사용할 수도 있습니다. 이러한 경우 ID 토큰의 서명을 확인해야 ID 토큰 내의 모든 클레임을 신뢰할 수 있습니다. [JSON 웹 토큰 확인](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md)을(를) 참조하세요.

ID 토큰 만료는 5분에서 1일 사이로 설정할 수 있습니다. 앱 클라이언트별로 이 값을 설정할 수 있습니다.

**중요**  
사용자가 관리형 로그인으로 로그인하면 Amazon Cognito는 1시간 동안 유효한 세션 쿠키를 설정합니다. 애플리케이션에서 인증을 위해 관리형 로그인을 사용하고 액세스 및 ID 토큰에 대한 최소 기간을 1시간 미만으로 지정하는 경우, 쿠키가 만료될 때까지 사용자는 유효한 세션을 유지합니다. 사용자에게 1시간 세션 동안 만료되는 토큰이 있는 경우 사용자는 재인증 없이 토큰을 새로 고칠 수 있습니다.

## ID 토큰 헤더
<a name="user-pool-id-token-header"></a>

헤더에는 키 ID(`kid`) 및 알고리즘(`alg`) 등 두 가지 정보가 포함되어 있습니다.

```
{
"kid" : "1234example=",
"alg" : "RS256"
}
```

**`kid`**  
 키 ID입니다. 이 값은 토큰의 JSON 웹 서명(JWS)을 보호하는 데 어떤 키가 사용되었는지 나타냅니다. `jwks_uri` 엔드포인트에서 사용자 풀 서명 키 ID를 볼 수 있습니다.  
`kid` 파라미터에 대한 자세한 내용은 [키 식별자(kid) 헤더 파라미터](https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4.5)를 참조하세요.

**`alg`**  
Amazon Cognito가 액세스 토큰을 보호하는 데 사용한 암호화 알고리즘입니다. 사용자 풀은 SHA-256에서의 RSA 서명인 RS256 암호화 알고리즘을 사용합니다.  
`alg` 파라미터에 대한 자세한 내용은 [알고리즘(alg) 헤더 파라미터](https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4.4)를 참조하세요.

## ID 토큰 기본 페이로드
<a name="user-pool-id-token-payload"></a>

이는 ID 토큰에서 나온 예시 페이로드입니다. 여기에는 인증된 사용자에 대한 클레임이 포함되어 있습니다. OpenID Connect(OIDC) 표준 클레임에 대한 자세한 내용은 [OIDC 표준 클레임](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims) 목록을 참조하세요. [사전 토큰 생성 Lambda 트리거](user-pool-lambda-pre-token-generation.md)을 사용하여 자체 설계의 클레임을 추가할 수 있습니다.

```
<header>.{
    "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "cognito:groups": [
        "test-group-a",
        "test-group-b",
        "test-group-c"
    ],
    "email_verified": true,
    "cognito:preferred_role": "arn:aws:iam::111122223333:role/my-test-role",
    "iss": "https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example",
    "cognito:username": "my-test-user",
    "middle_name": "Jane",
    "nonce": "abcdefg",
    "origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "cognito:roles": [
        "arn:aws:iam::111122223333:role/my-test-role"
    ],
    "aud": "xxxxxxxxxxxxexample",
    "identities": [
        {
            "userId": "amzn1.account.EXAMPLE",
            "providerName": "LoginWithAmazon",
            "providerType": "LoginWithAmazon",
            "issuer": null,
            "primary": "true",
            "dateCreated": "1642699117273"
        }
    ],
    "event_id": "64f513be-32db-42b0-b78e-b02127b4f463",
    "token_use": "id",
    "auth_time": 1676312777,
    "exp": 1676316377,
    "iat": 1676312777,
    "jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "email": "my-test-user@example.com"
}
.<token signature>
```

**`sub`**  
인증된 사용자에 대한 고유 식별자([UUID](cognito-terms.md#terms-uuid)) 또는 제목입니다. 사용자 풀에서 사용자 이름이 고유하지 않을 수 있습니다. `sub` 클레임은 특정 사용자를 식별하는 가장 좋은 방법입니다.

**`cognito:groups`**  
사용자를 멤버로 가진 사용자 풀 그룹의 이름 배열입니다. 그룹은 앱에 표시하는 식별자가 될 수도 있고 자격 증명 풀에서 선호하는 IAM 역할에 대한 요청을 생성할 수도 있습니다.

**`cognito:preferred_role`**  
사용자의 우선순위가 가장 높은 사용자 풀 그룹과 연결한 IAM 역할의 ARN입니다. 사용자 풀이 이 역할 클레임을 선택하는 방법에 대한 자세한 내용은 [그룹에 우선 순위 값 할당](cognito-user-pools-user-groups.md#assigning-precedence-values-to-groups) 섹션을 참조하세요.

**`iss`**  
토큰을 발행한 자격 증명 공급자입니다. 클레임의 형식은 다음과 같습니다.  
`https://cognito-idp.<Region>.amazonaws.com/<your user pool ID>`

**`cognito:username`**  
사용자 풀에 있는 사용자의 사용자 이름입니다.

**`nonce`**  
`nonce` 클레임은 OAuth 2.0 `authorize` 엔드포인트에 대한 요청에 추가할 수 있는 동일한 이름의 파라미터에서 비롯됩니다. 파라미터를 추가하면 `nonce` 클레임은 Amazon Cognito가 발행하는 ID 토큰에 포함되어 있으며, 이를 사용하여 재생 공격으로부터 보호할 수 있습니다. 요청에 `nonce` 값을 제공하지 않을 경우, 사용자가 서드 파티 자격 증명 공급자를 통해 인증할 때 Amazon Cognito는 자동으로 논스를 생성 및 검증한 다음 ID 토큰에 대한 `nonce` 클레임으로 추가합니다. Amazon Cognito에서 `nonce` 클레임 구현은 [OIDC 표준](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation)에 기반합니다.

**`origin_jti`**  
사용자의 새로 고침 토큰과 연결된 토큰 취소 식별자입니다. Amazon Cognito는 [취소 엔드포인트](revocation-endpoint.md) 또는 [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html) API 작업을 통해 사용자의 토큰을 취소했는지 확인할 때 `origin_jti` 클레임을 참조합니다. 토큰을 취소하면 Amazon Cognito는 동일한 `origin_jti` 값을 가진 모든 액세스 및 ID 토큰을 무효화합니다.

**`cognito:roles`**  
사용자 그룹과 연결된 IAM 역할의 이름 배열입니다. 모든 사용자 풀 그룹에는 하나의 IAM 역할을 연결할 수 있습니다. 이 배열은 우선 순위에 관계없이 사용자 그룹의 모든 IAM 역할을 나타냅니다. 자세한 내용은 [사용자 풀에 그룹 추가](cognito-user-pools-user-groups.md) 단원을 참조하십시오.

**`aud`**  
사용자를 인증한 사용자 풀 앱 클라이언트입니다. Amazon Cognito는 액세스 토큰 `client_id` 클레임에서 동일한 값을 렌더링합니다.

**`identities`**  
사용자 `identities` 속성의 내용입니다. 속성에는 페더레이션 로그인을 수행하거나 [페더레이션 사용자를 로컬 프로필에 연결](cognito-user-pools-identity-federation-consolidate-users.md)하여 사용자에게 연결한 각 서드 파티 ID 제공업체 프로필에 대한 정보가 포함됩니다. 이 정보에는 제공업체 이름, 제공업체 고유 ID 및 기타 메타데이터가 포함됩니다.

**`token_use`**  
토큰의 의도된 목적입니다. ID 토큰에서 값은 `id`입니다.

**`auth_time`**  
사용자가 인증을 완료한 인증 시간(Unix 시간 형식)입니다.

**`exp`**  
사용자의 토큰이 만료되는 만료 시간(Unix 시간 형식)입니다.

**`iat`**  
Amazon Cognito가 사용자의 토큰을 발급한 발급 시간(Unix 시간 형식)입니다.

**`jti`**  
JWT의 고유 식별자입니다.

ID 토큰에는 [OIDC 표준 클레임](https://openid.net/specs/openid-connect-core-1_0.html#Claims)에 정의된 OIDC 표준 클레임이 포함될 수 있습니다. 또한 ID 토큰에는 사용자 풀에 정의된 사용자 지정 속성도 포함될 수 있습니다. Amazon Cognito는 ID 토큰에 사용자 지정 속성 값을 속성 유형에 상관없이 문자열로 씁니다.

**참고**  
사용자 풀의 사용자 지정 속성은 항상 `custom:`으로 시작합니다.

## ID 토큰 서명
<a name="user-pool-id-token-signature"></a>

ID 토큰의 서명은 JWT 토큰의 헤더와 페이로드에 따라 계산됩니다. 앱에서 받는 ID 토큰의 클레임을 수락하기 전에 토큰의 서명을 확인하세요. 자세한 내용은 JSON 웹 토큰 확인을 참조하세요. [JSON 웹 토큰 확인](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md).