

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

# 사용자 풀에서 OIDC ID 제공업체 사용
<a name="cognito-user-pools-oidc-idp"></a>

사용자는 OIDC(OpenID Connect) ID 제공업체(idP)의 기존 계정을 사용하여 애플리케이션에 로그인할 수 있습니다. OIDC 제공업체를 사용하면 독립적인 Single Sign-On 시스템의 사용자가 기존 자격 증명을 제공하는 동안 애플리케이션은 사용자 풀의 공유 형식으로 OIDC 토큰을 받을 수 있습니다. OIDC IdP를 구성하려면 사용자 풀을 RP로 처리하도록 IdP를 설정하고 사용자 풀을 IdP로 처리하도록 애플리케이션을 구성합니다. Amazon Cognito는 여러 OIDC IdPs와 애플리케이션 간의 중간 단계 역할을 합니다. 사용자 풀은 제공업체가 사용자 풀에 직접 전달하는 ID 및 액세스 토큰의 클레임에 속성 매핑 규칙을 적용합니다. 그런 다음 Amazon Cognito는 매핑된 사용자 속성과 [Lambda 트리거](cognito-user-pools-working-with-lambda-triggers.md#lambda-triggers-for-federated-users)를 사용하여 인증 흐름을 추가로 조정한 내용을 기반으로 새 토큰을 발급합니다.

OIDC IdP로 로그인하는 사용자는 사용자 풀 애플리케이션에 액세스하기 위해 새 자격 증명 또는 정보를 제공할 필요가 없습니다. 애플리케이션은 로그인을 위해 사용자 풀을 백그라운드에서 애플리케이션의 토큰 형식을 표준화하는 도구로 사용하여 IdP로 자동으로 리디렉션할 수 있습니다. IdP 리디렉션에 대한 자세한 내용은 [권한 부여 엔드포인트](authorization-endpoint.md) 섹션을 참조하세요.

다른 타사 ID 제공업체와 마찬가지로 OIDC 제공업체에 애플리케이션을 등록하고 사용자 풀에 연결하려는 IdP 애플리케이션에 대한 정보를 얻어야 합니다. 사용자 풀 OIDC IdP에는 클라이언트 ID, 클라이언트 보안 암호, 요청하려는 범위 및 제공업체 서비스 엔드포인트에 대한 정보가 필요합니다. 사용자 풀은 검색 엔드포인트에서 제공업체 OIDC 엔드포인트를 검색하거나 수동으로 입력할 수 있습니다. 또한 제공업체 ID 토큰을 검사하고 IdP와 사용자 풀의 속성 간에 속성 매핑을 생성해야 합니다.

![\[사용자 풀 OIDC IdP 인증 흐름\]](http://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/images/flow-cup-oidc-endpoints.png)


이 인증 흐름에 대한 자세한 내용은 [OIDC 사용자 풀 IdP 인증 흐름](cognito-user-pools-oidc-flow.md) 섹션을 참조하세요.

**참고**  
서드 파티(페더레이션)를 통한 로그인을 Amazon Cognito 사용자 풀에서 사용할 수 있습니다. 이 기능은 Amazon Cognito ID 풀을 사용하는 OIDC 페더레이션과 무관합니다.

 AWS Management Console,를 통해 AWS CLI또는 사용자 풀 API 메서드 [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)를 사용하여의 사용자 풀에 OIDC IdP를 추가할 수 있습니다.

**Topics**
+ [사전 조건](#cognito-user-pools-oidc-idp-prerequisites)
+ [OIDC IdP에 애플리케이션 등록](#cognito-user-pools-oidc-idp-step-1)
+ [사용자 풀에 OIDC IdP 추가](#cognito-user-pools-oidc-idp-step-2)
+ [OIDC IdP 구성 테스트](#cognito-user-pools-oidc-idp-step-3)
+ [OIDC 사용자 풀 IdP 인증 흐름](cognito-user-pools-oidc-flow.md)

## 사전 조건
<a name="cognito-user-pools-oidc-idp-prerequisites"></a>

시작하려면 다음이 필요합니다.
+ 앱 클라이언트와 사용자 풀 도메인이 있는 사용자 풀. 자세한 내용은 [사용자 풀 생성](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)을 참조하세요.
+ 다음과 같은 구성의 OIDC IdP: 
  + `client_secret_post` 클라이언트 인증을 지원합니다. Amazon Cognito는 IdP에 대한 OIDC 검색 엔드포인트에서 `token_endpoint_auth_methods_supported` 신청을 확인하지 않습니다. Amazon Cognito는 `client_secret_basic` 클라이언트 인증을 지원하지 않습니다. 클라이언트 인증에 대한 자세한 내용은 OpenID Connect 설명서에서 [클라이언트 인증](https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication)을 참조하세요.
  + `openid_configuration`, `userInfo` 및 `jwks_uri`와 같은 OIDC 엔드포인트에만 HTTPS를 사용합니다.
  + OIDC 엔드포인트에만 TCP 포트 80 및 443을 사용합니다.
  + HMAC-SHA 또는 RSA 알고리즘을 사용하여 ID 토큰에만 서명합니다.
  + 키 ID `kid` 클레임을 `jwks_uri`에 게시하며 토큰에 `kid` 클레임을 포함합니다.
  + 유효한 루트 CA 신뢰 체인이 있는 만료되지 않은 퍼블릭 키를 제공합니다.

## OIDC IdP에 애플리케이션 등록
<a name="cognito-user-pools-oidc-idp-step-1"></a>

OIDC IdP를 사용자 풀 구성에 추가하고 앱 클라이언트에 할당하기 전에 IdP에서 OIDC 클라이언트 애플리케이션을 설정합니다. 사용자 풀은 IdP로 인증을 관리하는 신뢰 당사자 애플리케이션입니다.

**OIDC IdP로 등록하려면**

1. OIDC IdP에서 개발자 계정을 생성합니다.  
**OIDC IdP 링크**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/cognito-user-pools-oidc-idp.html)

1. `/oauth2/idpresponse` 엔드포인트가 있는 사용자 풀 도메인 URL을 OIDC IdP에 등록합니다. 그래야만 사용자를 인증할 때 나중에 Amazon Cognito에서 OIDC IdP를 수락합니다.

   ```
   https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/idpresponse
   ```

1. 사용자 디렉터리가 사용자 풀과 공유할 [범위](cognito-user-pools-define-resource-servers.md#cognito-user-pools-define-resource-servers-about-scopes)를 선택합니다. OIDC IdP가 사용자 정보를 제공하려면 범위 **openid**가 필요합니다. `email` 범위는 `email` 및 `email_verified` [클레임](https://openid.net/specs/openid-connect-basic-1_0.html#StandardClaims)에 대한 액세스를 부여하는 데 필요합니다. OIDC 사양의 추가 범위는 모든 사용자 속성의 경우 `profile`이며 `phone_number` 및 `phone_number_verified`의 경우 `phone`입니다.

1. OIDC IdP에서 클라이언트 ID와 클라이언트 보안 암호를 제공합니다. 이러한 값을 기록해 두고 나중에 사용자 풀에 추가하는 OIDC IdP의 구성에 추가합니다.

**예: 사용자 풀에서 Salesforce를 OIDC IdP로 사용**

 Salesforce 같은 OIDC 호환 IdP와 사용자 풀 사이에 신뢰를 설정해야 할 때 OIDC IdP를 사용합니다.

1. Salesforce 개발자 웹사이트에서 [계정을 생성합니다](https://developer.salesforce.com/signup).

1. [이전 단계에서 설정한 개발자 계정을 통해 로그인합니다.](https://developer.salesforce.com)

1. Salesforce 페이지에서 다음 중 하나를 수행합니다.
   +  Lightning Experience를 사용 중인 경우에는 설정 기어 아이콘을 선택하고 **Setup Home(설정 홈)**을 선택합니다.
   +  Salesforce Classic을 사용 중인 경우에는 사용자 인터페이스 헤더에 **Setup(설정)**이 표시됩니다. 이를 선택합니다.
   +  Salesforce Classic을 사용 중인 경우에는 헤더에 **Setup(설정)**이 표시됩니다. 상단의 탐색 모음에서 이름을 선택하고 드롭다운 목록에서 **Setup(설정)**을 선택합니다.

1. 왼쪽 탐색 모음에서 **Company Settings(회사 설정)**를 선택합니다.

1. 탐색 모음에서 [**도메인(Domain)**]을 선택하고 도메인을 입력한 다음, [**생성(Create)**]을 선택합니다.

1. 왼쪽 탐색 모음에서 [**플랫폼 도구(Platform Tools)**]에서 [**앱(Apps)**]을 선택합니다.

1. **App Manager(앱 관리자)**를 선택합니다.

1. 

   1. [**새 연결된 앱(New connected app)**]을 선택합니다.

   1. 필수 필드를 작성합니다.

      **시작 URL(Start URL)** 아래에서 Salesforce IdP로 로그인하는 사용자 풀 도메인에 대한 `/authorize` 엔드포인트에 URL을 입력합니다. 사용자가 연결된 앱에 액세스하면 Salesforce가 사용자를 이 URL로 안내하여 로그인을 완료합니다. 그런 다음 Salesforce는 사용자를 앱 클라이언트와 연결된 콜백 URL로 리디렉션합니다.

      ```
      https://mydomain.auth.us-east-1.amazoncognito.com/authorize?response_type=code&client_id=<your_client_id>&redirect_uri=https://www.example.com&identity_provider=CorpSalesforce
      ```

   1. **OAuth 설정(OAuth settings)**을 사용하고 **콜백 URL(Callback URL)**에 사용자 풀 도메인에 대한 `/oauth2/idpresponse` 엔드포인트의 URL을 입력합니다. 이는 Salesforce에서 Amazon Cognito가 OAuth 토큰과 교환하는 권한 부여 코드를 발행하는 URL입니다.

      ```
      https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/idpresponse
      ```

1. 사용자의 [범위](https://openid.net/specs/openid-connect-basic-1_0.html#Scopes)를 선택합니다. **openid** 범위를 포함해야 합니다. **email** 및 **email\$1verified** [claims](https://openid.net/specs/openid-connect-basic-1_0.html#StandardClaims)에 대한 액세스 권한을 부여하려면 **email** 범위를 추가합니다. 범위를 공백으로 구분합니다.

1. **생성(Create)**을 선택합니다.

   Salesforce에서는 클라이언트 ID를 **사용자 키(Consumer Key)**로 부르고, 클라이언트 보안 암호를 **사용자 보안 암호(Consumer Secret)**로 부릅니다. 클라이언트 ID와 클라이언트 보안 암호를 메모합니다. 다음 섹션에서 이 둘을 사용합니다.

## 사용자 풀에 OIDC IdP 추가
<a name="cognito-user-pools-oidc-idp-step-2"></a>

IdP를 설정한 후 OIDC IdP로 인증 요청을 처리하도록 사용자 풀을 구성할 수 있습니다.

------
#### [ Amazon Cognito console ]

**콘솔에 OIDC IdP 추가**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동합니다. 메시지가 표시되면 AWS 자격 증명을 입력합니다.

1. 탐색 메뉴에서 [**사용자 풀(User Pools)**]을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택하거나 [사용자 풀을 생성합니다](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. **소셜 및 외부 제공업체** 메뉴를 선택한 다음 **ID 제공업체 추가**를 선택합니다.

1. **OpenID Connect** IdP를 선택합니다.

1. 고유한 **제공업체 이름**을 입력합니다.

1. IdP **클라이언트 ID**를 입력합니다. OIDC IdP에서 빌드하는 애플리케이션 클라이언트의 ID입니다. 제공하는 클라이언트 ID는 `https://[your user pool domain]/oauth2/idpresponse`의 콜백 URL로 구성한 OIDC 제공업체여야 합니다.

1. IdP **클라이언트 보안 암호**를 입력합니다. 이전 단계의 동일한 애플리케이션 클라이언트에 대한 클라이언트 보안 암호여야 합니다.

1. <a name="cognito-user-pools-oidc-step-2-substep-9"></a>이 공급자의 **권한 있는 범위(Authorized scopes)**를 입력합니다. 범위는 애플리케이션이 공급자로부터 요청할 사용자 속성(예: `name`, `email`) 그룹을 정의합니다. [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-3.3) 사양에 따라 범위를 공백으로 구분해야 합니다.

   IdP는 사용자가 로그인할 때 애플리케이션에 이러한 속성을 제공하는 데 동의하라는 메시지를 표시할 수 있습니다.

1. **속성 요청 방법**을 선택합니다. IdP는 `userInfo` 엔드포인트에 대한 요청이 `GET` 또는 `POST` 형식으로 지정되도록 요구할 수 있습니다. 예를 들어 Amazon Cognito `userInfo` 엔드포인트에는 `HTTP GET` 요청이 필요합니다.

1. 사용자 풀이 IdP의 주요 OIDC 페더레이션 엔드포인트 경로를 결정하도록 하려면 **설정 방법**을 선택합니다. 일반적으로 IdP는 발급자 기반 URL에서 `/well-known/openid-configuration` 엔드포인트를 호스팅합니다. 제공업체의 경우 **발급자 URL 자동 채우기** 옵션은 해당 기본 URL을 묻는 메시지를 표시하고, 이 URL에서 `/well-known/openid-configuration` 경로에 액세스하려고 시도하고, 여기에 나열된 엔드포인트를 읽습니다. 일반적이지 않은 엔드포인트 경로가 있거나 대체 프록시를 통해 하나 이상의 엔드포인트에 요청을 전달하려고 할 수 있습니다. 이 경우 **수동 입력**을 선택하고 `authorization`, `token`, `userInfo`, `jwks_uri` 엔드포인트의 경로를 지정합니다.
**참고**  
URL은 `https://`로 시작해야 하며, 슬래시 `/`로 끝나면 안 됩니다. 포트 번호 443 및 80만 이 URL에 사용할 수 있습니다. 예를 들어, Salesforce는 다음 URL을 사용합니다.  
`https://login.salesforce.com`   
자동 채우기를 선택하는 경우 검색 문서에서 `authorization_endpoint`, `token_endpoint`, `userinfo_endpoint`, `jwks_uri` 값에 HTTPS를 사용해야 합니다. 그렇지 않으면 로그인이 실패합니다.

1. **OpenID Connect 제공업체와 사용자 풀 간의 속성 매핑**에서 속성 매핑 규칙을 구성합니다. **사용자 풀 속성**은 Amazon Cognito 사용자 프로필의 *대상* 속성이고 **OpenID Connect 속성**은 Amazon Cognito가 ID 토큰 클레임 또는 `userInfo` 응답에서 찾을 *소스* 속성입니다. Amazon Cognito는 대상 사용자 프로필에서 OIDC 클레임 **하위**를 `username`에 자동으로 매핑합니다.

   자세한 내용은 [프로필 및 토큰에 IdP 속성 매핑](cognito-user-pools-specifying-attribute-mapping.md) 단원을 참조하십시오.

1. **ID 제공업체 추가**를 선택합니다.

1. **앱 클라이언트** 메뉴의 목록에서 앱 클라이언트를 선택합니다. **로그인 페이지** 탭으로 이동하여 **관리형 로그인 페이지 구성**에서 **편집**을 선택합니다. **ID 제공업체**를 찾고 새 OIDC IdP를 추가합니다.

1. **변경 사항 저장**을 선택합니다.

------
#### [ API/CLI ]

[CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html#API_CreateIdentityProvider_Example_2)에서 예제 2의 OIDC 구성을 참조하세요. 이 구문을 수정하여 `CreateIdentityProvider`, `UpdateIdentityProvider` 또는 [create-identity-provider](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-identity-provider.html)에 대한 `--cli-input-json` 입력 파일의 요청 본문으로 사용할 수 있습니다.

------

## OIDC IdP 구성 테스트
<a name="cognito-user-pools-oidc-idp-step-3"></a>

애플리케이션에서 사용자가 OIDC 제공업체로 로그인할 수 있도록 사용자의 클라이언트에서 브라우저를 호출해야 합니다. 이전 단원의 설정 절차를 완료한 후 제공업체로 로그인을 테스트합니다. 다음 예제 URL은 접두사 도메인이 있는 사용자 풀의 로그인 페이지를 로드합니다.

```
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com
```

이 링크는 **앱 클라이언트** 메뉴로 이동하여 앱 클라이언트를 선택하고 **로그인 페이지** 탭으로 이동한 다음 **로그인 페이지 보기**를 선택할 때 Amazon Cognito에서 안내하는 페이지입니다. 사용자 풀 도메인에 대한 자세한 정보는 [사용자 풀 도메인 구성](cognito-user-pools-assign-domain.md) 섹션을 참조하세요. 클라이언트 IDs 및 콜백 URLs을 포함한 앱 클라이언트에 대한 자세한 내용은 [앱 클라이언트를 사용한 애플리케이션별 설정](user-pool-settings-client-apps.md) 섹션을 참조하세요.

다음 예제 링크는 `identity_provider` 쿼리 파라미터를 사용하여[권한 부여 엔드포인트](authorization-endpoint.md) 에서 `MyOIDCIdP` 제공업체로 자동 리디렉션을 설정합니다. 이 URL은 관리형 로그인을 통한 대화형 사용자 풀 로그인을 우회하고 IdP 로그인 페이지로 바로 이동합니다.

```
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?identity_provider=MyOIDCIdP&response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com
```

# OIDC 사용자 풀 IdP 인증 흐름
<a name="cognito-user-pools-oidc-flow"></a>

OpenID Connect(OIDC) 로그인을 사용하면 사용자 풀이 ID 제공업체(IdP)를 통한 권한 부여 코드 로그인 흐름을 자동화합니다. 사용자가 IdP로 로그인을 완료하면 Amazon Cognito는 외부 제공업체의 `oauth2/idpresponse` 엔드포인트에서 코드를 수집합니다. 생성된 액세스 토큰을 사용하여 사용자 풀은 IdP `userInfo` 엔드포인트를 쿼리하여 사용자 속성을 검색합니다. 그런 다음 사용자 풀은 수신된 속성을 설정한 속성 매핑 규칙과 비교하고 그에 따라 사용자의 프로필과 ID 토큰을 채웁니다.

OIDC 제공업체 구성에서 요청하는 OAuth 2.0 범위는 IdP가 Amazon Cognito에 제공하는 사용자 속성을 정의합니다. 가장 좋은 방법은 사용자 풀에 매핑하려는 속성에 해당하는 범위만 요청하는 것입니다. 예를 들어 사용자 풀이 `openid profile`을 요청하면 가능한 모든 속성을 얻을 수 있지만 `openid email phone_number`를 요청하면 사용자의 이메일 주소와 전화번호만 가져옵니다. [OIDC IdP에서 요청](cognito-user-pools-oidc-idp.md#cognito-user-pools-oidc-step-2-substep-9)하는 범위가 [앱 클라이언트](user-pool-settings-client-apps.md#user-pool-settings-client-apps-scopes) 및 사용자 풀 인증 요청에서 승인하고 요청하는 범위와 달라지도록 구성할 수 있습니다.

사용자가 OIDC IdP를 사용하여 애플리케이션에 로그인하면 사용자 풀은 다음과 같은 인증 흐름을 수행합니다.

1. 사용자가 관리형 로그인 페이지에 액세스하고 OIDC IdP로 로그인하도록 선택합니다.

1. 애플리케이션은 사용자의 브라우저를 사용자 풀의 권한 부여 엔드포인트로 전달합니다.

1. 사용자 풀은 요청을 OIDC IdP의 권한 부여 엔드포인트로 리디렉션합니다.

1. IdP에 로그인 프롬프트가 표시됩니다.

1. 애플리케이션에서 사용자의 세션은 OIDC IdP에 대한 로그인 프롬프트를 표시합니다.

1. 사용자가 IdP에 대한 자격 증명을 입력하거나 이미 인증된 세션에 대한 쿠키를 제공합니다.

1. 사용자 인증 후 OIDC IdP에서 인증 코드를 사용하여 Amazon Cognito로 리디렉션합니다.

1. 사용자 풀은 승인 코드를 ID와 액세스 토큰으로 교환합니다. Amazon Cognito는 `openid` 범위로 IdP를 구성할 때 액세스 토큰을 수신합니다. ID 토큰 및 `userInfo` 응답의 클레임은 `profile` 및 `email`과 같은 IdP 구성의 추가 범위에 따라 결정됩니다.

1. IdP는 요청된 토큰을 발급합니다.

1. 사용자 풀은 IdP 구성의 발급자 URLs에서 IdP `jwks_uri` 엔드포인트의 경로를 결정하고 JSON 웹 키 세트(JWKS) 엔드포인트에서 토큰 서명 키를 요청합니다.

1. IdP는 JWKS 엔드포인트에서 서명 키를 반환합니다.

1. 사용자 풀은 토큰의 서명 및 만료 데이터에서 IdP 토큰을 검증합니다.

1. 사용자 풀은 액세스 토큰을 사용하여 IdP `userInfo` 엔드포인트에 대한 요청을 승인합니다. IdP는 액세스 토큰 범위에 따라 사용자 데이터로 응답합니다.

1. 사용자 풀은 IdP의 ID 토큰 및 `userInfo` 응답을 사용자 풀의 속성 매핑 규칙과 비교합니다. 매핑된 IdP 속성을 사용자 풀 프로필 속성에 기록합니다.

1. Amazon Cognito는 자격 증명, 액세스 권한 및 새로 고침 토큰이 포함될 수 있는 애플리케이션 보유자 토큰을 발행합니다.

1. 애플리케이션은 사용자 풀 토큰을 처리하고 사용자를 로그인합니다.

![\[사용자 풀 OIDC IdP 인증 흐름\]](http://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/images/flow-cup-oidc-endpoints.png)


**참고**  
Amazon Cognito는 5분 이내에 완료되지 않는 인증 요청을 취소하고 사용자를 관리형 로그인으로 리디렉션합니다. 페이지에 `Something went wrong` 오류 메시지가 표시됩니다.

OIDC는 OAuth 2.0에 있는 자격 증명 레이어로서, IdP가 OIDC 클라이언트 앱(신뢰 당사자)에 발행하는 JSON 형식(JWT) 자격 증명 토큰을 지정합니다. Amazon Cognito를 OIDC 신뢰 당사자로 추가하는 방법은 OIDC IdP 문서를 참조하세요.

사용자가 인증 코드 부여를 통해 인증할 때 사용자 풀이 ID, 액세스 및 새로 고침 토큰을 반환합니다. ID 토큰은 자격 증명 관리용 표준 [OIDC](http://openid.net/specs/openid-connect-core-1_0.html) 토큰이며, 액세스 토큰은 표준 [OAuth 2.0](https://oauth.net/2/) 토큰입니다. 사용자 풀 앱 클라이언트가 지원할 수 있는 권한 부여 유형에 대한 자세한 내용은 [권한 부여 엔드포인트](authorization-endpoint.md) 섹션을 참조하세요.

## 사용자 풀이 OIDC 제공업체의 클레임을 처리하는 방법
<a name="how-a-cognito-user-pool-processes-claims-from-an-oidc-provider"></a>

사용자가 서드 파티 OIDC 제공업체로 로그인을 완료하면 관리형 로그인이 IdP에서 권한 부여 코드를 검색합니다. 사용자 풀은 액세스 및 ID 토큰의 권한 부여 코드를 IdP의 `token` 엔드포인트와 교환합니다. 사용자 풀은 이러한 토큰을 사용자 또는 앱에 전달하지 않지만, 이를 사용하여 자체 토큰의 클레임에 표시되는 데이터로 사용자 프로필을 구축합니다.

 Amazon Cognito는 액세스 토큰을 독립적으로 검증하지 않습니다. 대신 제공업체 `userInfo` 엔드포인트에서 사용자 속성 정보를 요청하고 토큰이 유효하지 않을 경우 요청이 거부될 것으로 예상합니다.

Amazon Cognito는 다음 확인을 통해 제공업체 ID 토큰을 검증합니다.

1. 제공업체가 RSA, HMAC, Elliptic Curve 세트의 알고리즘을 사용하여 토큰에 서명했는지 확인합니다.

1. 제공업체가 비대칭 서명 알고리즘으로 토큰에 서명한 경우 토큰 `kid` 클레임의 서명 키 ID가 제공업체 `jwks_uri` 엔드포인트에 나열되어 있는지 확인합니다. Amazon Cognito는 처리하는 각 IdP ID 토큰에 대해 IdP 구성의 JWKS 엔드포인트에서 서명 키를 새로 고칩니다.

1. ID 토큰 서명을 제공업체 메타데이터를 기반으로 예상하는 서명과 비교합니다.

1. `iss` 클레임을 IdP용으로 구성된 OIDC 발급자와 비교합니다.

1. `aud` 클레임이 IdP에 구성된 클라이언트 ID와 일치하는지 또는 `aud` 클레임에 여러 값이 있는 경우 구성된 클라이언트 ID가 포함되어 있는지 비교합니다.

1. `exp` 클레임의 타임스탬프가 현재 시간 이전이 아닌지 확인합니다.

사용자 풀은 ID 토큰을 검증한 다음 제공업체 액세스 토큰으로 제공업체 `userInfo` 엔드포인트에 요청을 시도합니다. 액세스 토큰의 범위에 따라 읽기 권한이 부여된 모든 사용자 프로필 정보를 검색합니다. 그런 다음 사용자 풀은 사용자 풀에서 필요에 따라 설정한 사용자 속성을 검색합니다. 필수 속성에 대해서는 제공업체 구성에서 속성 매핑을 생성해야 합니다. 사용자 풀은 제공업체 ID 토큰과 `userInfo` 응답을 확인합니다. 사용자 풀은 매핑 규칙과 일치하는 모든 클레임을 사용자 풀 사용자 프로필의 사용자 속성에 기록합니다. 사용자 풀은 매핑 규칙과 일치하지만 필수는 아니며 제공업체의 클레임에도 없는 속성은 무시합니다.