

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

# 사용자 풀 토큰 만료 및 캐싱 관리
<a name="amazon-cognito-user-pools-using-tokens-caching-tokens"></a>

앱은 새 JSON 웹 토큰(JWT)을 가져올 때마다 다음 요청 중 하나를 성공적으로 완료해야 합니다.
+ [Token 엔드포인트](token-endpoint.md)에서 클라이언트 자격 증명 또는 권한 부여 코드 [부여](https://www.rfc-editor.org/rfc/rfc6749#section-1.3)를 요청합니다.
+ 관리형 로그인 페이지에서 암시적 권한 부여를 요청합니다.
+ [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)와 같은 Amazon Cognito API 요청에서 로컬 사용자를 인증합니다.

사용자 풀을 구성하여 토큰이 분, 시간 또는 일 단위로 만료되도록 설정할 수 있습니다. 앱의 성능과 가용성을 보장하려면 토큰 수명의 약 75% 동안 Amazon Cognito 토큰을 사용한 다음 새 토큰을 가져와야 합니다. 앱용으로 구축한 캐시 솔루션은 토큰을 계속 사용할 수 있도록 하고 요청 비율이 너무 높을 때 Amazon Cognito의 요청 거부를 방지합니다. 클라이언트 측 앱은 메모리 캐시에 토큰을 저장해야 합니다. 서버 측 앱은 암호화된 캐시 메커니즘을 추가하여 토큰을 저장할 수 있습니다.

사용자 풀이 많은 양의 사용자 또는 머신 간 활동을 생성하는 경우 Amazon Cognito가 수행할 수 있는 토큰 요청 수에 대해 설정하는 제한에 이를 수 있습니다. Amazon Cognito 엔드포인트에 대한 요청 수를 줄이기 위해 인증 데이터를 안전하게 저장 및 재사용하거나 지수 백오프 및 재시도를 구현할 수 있습니다.

인증 데이터는 두 가지 종류의 클래스 엔드포인트에서 제공됩니다. Amazon Cognito [OAuth 2.0 엔드포인트](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html)에는 클라이언트 자격 증명 및 관리형 로그인 인증 코드 요청 서비스를 제공하는 토큰 엔드포인트가 포함됩니다. [서비스 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html#cognito_identity_your_user_pools_region)는 `InitiateAuth` 및 `RespondToAuthChallenge`와 같은 사용자 풀 API 요청에 응답합니다. 각 요청 유형에는 고유한 제한이 있습니다. 제한에 대한 자세한 내용은 [Amazon Cognito의 할당량](quotas.md) 섹션을 참조하세요.

## Amazon API Gateway를 통해 머신 간 액세스 토큰 캐싱
<a name="amazon-cognito-user-pools-using-tokens-caching-tokens-API-gateway"></a>

API Gateway 토큰 캐싱을 사용하면 Amazon Cognito OAuth 엔드포인트의 기본 요청 속도 할당량보다 큰 이벤트에 대한 응답으로 앱을 확장할 수 있습니다.

![M2M에 대한 액세스 토큰의 캐시를 유지 관리하는 API Gateway의 다이어그램입니다. API 프록시는 토큰 요청을 처리하고 이미 유효한 경우 캐시된 토큰을 반환합니다.](http://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/images/user-pools-m2m-caching.png)


캐시된 토큰이 만료된 경우에만 앱이 새 액세스 토큰을 요청하도록 액세스 토큰을 캐시할 수 있습니다. 그렇지 않으면 캐싱 엔드포인트가 캐시에서 토큰을 반환합니다. 이렇게 하면 Amazon Cognito API 엔드포인트에 대한 추가 호출이 방지됩니다. Amazon API Gateway를 [Token 엔드포인트](token-endpoint.md)에 대한 프록시로 사용하면 API가 요청 할당량에 기여하는 대부분의 요청에 응답하여 속도 제한으로 인해 실패한 요청을 방지합니다.

다음 API 게이트웨이 기반 솔루션은 짧은 대기 시간, 낮은 코드/코드 없는 토큰 캐싱 구현을 제공합니다. API Gateway API는 전송 중 암호화되며 필요에 따라 미사용 시에도 암호화됩니다. API 게이트웨이 캐시는 머신 간 및 마이크로서비스 세션을 승인하기 위해 액세스 토큰을 생성하는 자주 대용량 부여 유형인 OAuth 2.0 [클라이언트 자격 증명 부여](https://datatracker.ietf.org/doc/html/rfc6749#section-4.4)에 이상적입니다. 마이크로서비스가 수평적으로 확장되는 트래픽 급증과 같은 경우 사용자 풀 또는 앱 클라이언트의 AWS 요청 속도 제한을 초과하는 볼륨에서 동일한 클라이언트 자격 증명을 사용하는 많은 시스템으로 끝날 수 있습니다. 앱 가용성을 유지하고 지연 시간을 줄이려면 이러한 시나리오에서는 캐싱 솔루션이 가장 좋습니다.

이 솔루션에서는 API에 캐시를 정의하여 앱에서 요청하려는 OAuth 범위 및 앱 클라이언트의 각 조합에 대해 별도의 액세스 토큰을 저장합니다. 앱이 캐시 키와 일치하는 요청을 하면 API는 캐시 키와 일치하는 첫 번째 요청에 대해 Amazon Cognito가 발급한 액세스 토큰으로 응답합니다. 캐시 키 기간이 만료되면 API는 요청을 토큰 엔드포인트로 전달하고 새 액세스 토큰을 캐싱합니다.

**참고**  
캐시 키 지속 시간은 앱 클라이언트의 액세스 토큰 기간보다 짧아야 합니다.

캐시 키는 요청 본문의 `scope` 파라미터와 요청의 `Authorization` 헤더에서 요청한 OAuth 범위의 조합입니다. 이 `Authorization` 헤더에는 앱 클라이언트 ID와 클라이언트 보안 암호가 포함됩니다. 이 솔루션을 구현하기 위해 앱에서 추가 로직을 구현할 필요가 없습니다. 사용자 풀 토큰 엔드포인트의 경로를 변경하려면 구성만 업데이트해야 합니다.

[ElastiCache(Redis OSS)](https://docs.aws.amazon.com/elasticache/index.html)를 사용하여 토큰 캐싱을 구현할 수도 있습니다. AWS Identity and Access Management (IAM) 정책을 사용하여 세밀하게 제어하려면 [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/authentication-and-access-control.html#authentication) 캐시를 사용해 보세요.

**참고**  
API Gateway의 캐싱에는 추가 비용이 부과됩니다. [자세한 내용은 요금을 참조하세요.](https://aws.amazon.com/api-gateway/pricing)<a name="amazon-cognito-user-pools-using-tokens-caching-tokens-API-gateway-how-to"></a>

**API Gateway를 사용하여 캐싱 프록시를 설정하려면 다음과 같이 하세요.**

1. [API Gateway 콘솔](https://console.aws.amazon.com/apigateway/main/apis)을 열고 REST API를 생성합니다.

1. **Resources**(리소스)에서 POST 메서드를 생성합니다.

   1. HTTP **Integration type**(통합 유형)을 선택합니다.

   1. **Use HTTP proxy integration**(HTTP 프록시 통합 사용)을 선택합니다.

   1. `https://{{<your user pool domain>}}/oauth2/token`의 **Endpoint URL**(엔드포인트 URL)을 입력합니다.

1. **Resources**(리소스)에서 캐시 키를 구성합니다.

   1. POST 메서드의 **Method request**(메서드 요청)를 편집합니다.
**참고**  
이 메서드 요청 검증은 클라이언트 보안 암호가 요청 헤더에 인코딩되는 토큰 `Authorization` 요청에서 `client_secret_basic` 권한 부여와 함께 사용됩니다. `client_secret_post` 권한 부여에서 JSON 요청 본문을 검증하려면 [client\_secret](token-endpoint.md#post-token-request-parameters-in-body)이 있어야 하는 [데이터 모델](https://docs.aws.amazon.com/apigateway/latest/developerguide/models-mappings-models.html)을 대신 생성합니다. 이 모델에서는 **요청 검사기**가 **본문, 쿼리 문자열 파라미터 및 헤더를 검증**해야 합니다.

   1. **쿼리 문자열 파라미터와 헤더를 검증**하기 위해 **요청 검사기** 메서드를 구성합니다. 요청 검증에 대한 자세한 내용은 *Amazon API Gateway 개발자 가이드*의 [요청 검증](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html)을 참조하세요.

   1. `scope` 파라미터와 `Authorization` 헤더를 캐싱 키로 설정합니다.

      1. **URL 쿼리 문자열 파라미터**에 쿼리 문자열을 추가합니다. `scope`의 쿼리 문자열 **이름**을 입력하고 **필수** 및 **캐싱**을 선택합니다.

      1. **HTTP 요청 헤더**에 헤더를 추가합니다. `Authorization`의 요청 헤더 **이름**을 입력하고 **필수** 및 **캐싱**을 선택합니다.

1. **Stages**(단계)에서 캐싱을 구성합니다.

   1. 수정할 스테이지를 선택하고 **스테이지 세부 정보**에서 **편집**을 선택합니다.

   1. **추가 설정**의 **캐시 설정**에서 **프로비저닝 API 캐시** 옵션을 켭니다.

   1. **Cache capacity**(캐시 용량)를 선택합니다. 캐시 용량이 높을수록 성능이 향상되지만 추가 비용이 발생합니다.

   1. **권한 부여 필요** 확인란의 선택을 취소합니다. **계속**을 선택합니다.

   1. API Gateway는 단계 수준의 GET 메서드에만 캐시 정책을 적용합니다. 캐시 정책 재정의를 POST 메서드에 적용해야 합니다.

      구성한 단계를 확장하고 `POST` 메서드를 선택합니다. 메서드에 대한 캐시 설정을 생성하려면 **재정의 생성**을 선택합니다.

   1. **메서드 캐시 활성화** 옵션을 활성화합니다.

   1. 3,600초의 ****캐시 TTL(time-to-live)****을 입력합니다. **저장**을 선택합니다.

1. **Stages**(단계)에서 **Invoke URL**(URL 호출)을 기록해 둡니다.

1. 사용자 풀의 `/oauth2/token` 엔드포인트 대신 API의 **Invoke URL**(URL 호출)에 대한 POST 토큰 요청으로 앱을 업데이트합니다.