사용자 풀 토큰 만료 및 캐싱 관리 - Amazon Cognito

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

사용자 풀 토큰 만료 및 캐싱 관리

새 JSON 웹 토큰()을 가져오려면 앱이 매번 다음 요청 중 하나를 성공적으로 완료해야 합니다JWT.

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

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

  • 와 같은 Amazon Cognito API 요청에서 로컬 사용자를 인증합니다InitiateAuth.

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

사용자 풀에서 대량의 사용자 또는 machine-to-machine 활동이 생성되면 Amazon Cognito가 수행할 수 있는 토큰 요청 수에 대해 설정하는 제한이 발생할 수 있습니다. Amazon Cognito 엔드포인트에 대한 요청 수를 줄이기 위해 인증 데이터를 안전하게 저장 및 재사용하거나 지수 백오프 및 재시도를 구현할 수 있습니다.

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

Amazon API Gateway를 사용하여 machine-to-machine 액세스 토큰 캐싱

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

M2M 에 대한 액세스 토큰 캐시를 유지 관리하는 API 게이트웨이의 다이어그램입니다. API 프록시는 토큰 요청을 처리하고 이미 유효한 경우 캐시된 토큰을 반환합니다.

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

다음 API 게이트웨이 기반 솔루션은 토큰 캐싱의 지연 시간이 짧고 코드/코드가 적은 구현을 제공합니다. API 게이트웨이APIs는 전송 중 및 선택적으로 유휴 상태로 암호화됩니다. API Gateway 캐시는 및 마이크로서비스 세션을 승인 machine-to-machine하는 액세스 토큰을 생성하는 자주 사용되는 대용량 권한 부여 유형인 OAuth2.0 클라이언트 자격 증명 권한 부여에 적합합니다. 마이크로서비스가 수평적으로 확장되는 트래픽 급증과 같은 경우 사용자 풀 또는 앱 클라이언트의 AWS 요청 속도 제한을 초과하는 볼륨에서 동일한 클라이언트 보안 인증을 사용하는 많은 시스템으로 끝날 수 있습니다. 앱 가용성을 유지하고 지연 시간을 줄이려면 이러한 시나리오에서는 캐싱 솔루션이 가장 좋습니다.

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

참고

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

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

ElastiCache (Redis OSS)를 사용하여 토큰 캐싱을 구현할 수도 있습니다. (IAM) 정책을 사용한 AWS Identity and Access Management 세분화된 제어의 경우 Amazon DynamoDB 캐시를 고려하세요.

참고

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

API Gateway를 사용하여 캐싱 프록시를 설정하려면

  1. API 게이트웨이 콘솔을 열고 REST 를 생성합니다API.

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

    1. HTTP 통합 유형 을 선택합니다.

    2. HTTP 프록시 통합 사용을 선택합니다.

    3. 엔드포인트URL를 입력합니다https://<your user pool domain>/oauth2/token.

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

    1. 메서드의 메서드 요청을 편집합니다. POST

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

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

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

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

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

    2. 설정에서 API 캐시 활성화를 선택합니다.

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

    4. 3,600초의 캐시 time-to-live(TTL)를 선택합니다.

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

  5. 스테이지 에서 호출 URL을 기록해 둡니다.

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