캐싱 토큰 - Amazon Cognito

캐싱 토큰

앱은 새 JSON 웹 토큰(JWT)을 가져올 때마다 다음 요청 중 하나를 성공적으로 완료해야 합니다.

  • Token 엔드포인트에서 클라이언트 자격 증명 또는 권한 부여 코드 부여를 요청합니다.

  • 호스팅 UI에서 암시적 권한 부여를 요청하세요.

  • InitiateAuth와 같은 Amazon Cognito API 요청에서 네이티브 사용자를 인증합니다.

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

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

인증 데이터는 두 가지 종류의 클래스 엔드포인트에서 제공됩니다. Amazon Cognito OAuth 2.0 엔드포인트에는 클라이언트 자격 증명 및 호스팅 UI 인증 코드 요청 서비스를 제공하는 토큰 엔드포인트가 포함됩니다. 서비스 엔드포인트InitiateAuthRespondToAuthChallenge와 같은 네이티브 API 요청에 응답합니다. 각 요청 유형에는 고유한 제한이 있습니다. 제한에 대한 자세한 내용은 Amazon Cognito의 할당량 섹션을 참조하세요.

Amazon API Gateway를 통해 머신 간 액세스 토큰 캐싱

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

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

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

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

참고

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

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

Redis용 ElastiCache를 사용하여 토큰 캐싱을 구현할 수도 있습니다. AWS Identity and Access Management(IAM) 정책을 사용하여 세밀하게 제어하려면 Amazon DynamoDB 캐시를 사용해 보세요.

참고

API Gateway의 캐싱에는 추가 비용이 부과됩니다. 자세한 내용은 요금을 참조하세요.

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

  1. API Gateway 콘솔을 열고 REST API를 생성합니다.

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

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

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

    3. https://<your user pool domain>/oauth2/tokenEndpoint URL(엔드포인트 URL)을 입력합니다.

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

    1. POST 메서드의 Method request(메서드 요청)를 편집합니다.

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

      1. URL query string parameters(URL 쿼리 문자열 파라미터)에 쿼리 문자열을 추가하고 scope 문자열에 대해 Caching(캐싱)을 선택합니다.

      2. HTTP request headers(HTTP 요청 헤더)에 헤더를 추가하고 Authorization 헤더에 대해 Caching(캐싱)을 선택합니다.

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

    1. 수정할 단계를 선택합니다.

    2. Settings(설정)에서 Enable API cache(API 캐시 활성화)를 선택합니다.

    3. Cache capacity(캐시 용량)를 선택합니다.

    4. 3,600초 이상의 Cache time-to-live (TTL)(캐시 Time-to-Live(TTL))을 선택합니다.

    5. Require authorization(권한 부여 필요) 확인란의 선택을 취소합니다.

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

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