Amazon Cognito에서 사용자 지정 범위를 사용하여 API Gateway API에 대한 액세스 권한을 부여하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 25일

Amazon Cognito 사용자 풀에서 사용자 지정 범위를 사용하여 Amazon API Gateway API 리소스에 대한 액세스 권한을 부여하고 싶습니다. 어떻게 해야 합니까?

간략한 설명

Amazon Cognito 사용자 풀에서 사용자 지정 범위로 리소스 서버를 정의합니다. 그런 다음 API Gateway API에 대한 Amazon Cognito 권한 부여자를 생성하고 구성하여 API 리소스에 대한 요청을 인증합니다.

API 리소스에 대한 액세스 수준이 필요한 서로 다른 앱 클라이언트가 있는 경우, 정의한 사용자 지정 범위를 기반으로 차별화된 액세스를 제공할 수 있습니다. 서로 다른 앱 클라이언트에 필요한 세분화된 액세스 수준을 고려한 다음 그에 따라 설계합니다.

해결 방법

아직 생성하지 않았다면 다음 사전 조건을 생성합니다.

사용자 풀에 사용자 지정 범위가 있는 리소스 서버 추가

  1. Amazon Cognito 콘솔을 엽니다.
  2. 리소스 서버 및 사용자 지정 범위를 정의합니다.
  3. 변경 사항을 저장한 후 [Resource servers] 탭에서 [Configure app client settings]를 선택합니다.
  4. [App client settings] 탭의 [OAuth 2.0]에서 다음을 수행합니다.
    [Allowed OAuth Flows]에서 [Implicit grant] 확인란을 선택합니다.
    Allowed Custom Scopes에서, 정의한 사용자 지정 범위에 대한 확인란을 선택합니다.
    참고: 사용자 지정 범위의 형식이 resourceServerIdentifier/scopeName인지 확인하십시오. 클라이언트가 OAuth 2.0 흐름에서 사용자 지정 범위를 요청하는 경우, 요청에 범위에 대한 전체 식별자가 이 형식으로 포함되어야 합니다.
  5. [변경 사항 저장(Save changes)]을 선택합니다.

모바일 애플리케이션에 서버 측 구성 요소가 있는 경우 Authorization code grant 플로우 및 PKCE(Proof Key for Code Exchange)를 사용하십시오. Authorization code grant 플로우를 사용하면 토큰이 최종 사용자에게 직접 노출되지 않으며 노출될 가능성이 적습니다.

설정에 서버 측 로직이 포함되어 있지 않은 경우 Implicit grant 플로우를 사용할 수 있습니다. Implicit grant는 새로 고침 토큰을 생성하지 않으므로 새로 고침 토큰이 클라이언트에 노출되는 것을 방지할 수 있습니다. 새로 고침 토큰은 유효 기간이 더 길며 최신 ID 및 액세스 토큰을 검색하는 데 사용됩니다.
중요: 클라이언트 측 환경에 새로 고침 토큰을 저장하지 마십시오.

자세한 내용은 앱 클라이언트 설정 개요를 참조하십시오. Amazon Cognito 사용자 풀 OAuth 2.0 부여에 대한 자세한 내용은 Understanding Amazon Cognito user pool OAuth 2.0 grants를 참조하십시오.

권한 부여자를 생성하여 API와 통합

이러한 단계를 완료하려면 REST API와 Amazon Cognito 사용자 풀 통합의 지침을 따르십시오.

  1. 권한 부여자를 생성하려면 API Gateway 콘솔을 사용하여 COGNITO_USER_POOLS 권한 부여자를 생성하려면 아래의 지침을 따릅니다.
    참고: 생성 후에는 콘솔에 권한 부여자를 테스트할 수 있는 옵션이 있습니다. 이를 위해서는 자격 증명 토큰이 필요합니다. 액세스 토큰을 사용하여 콘솔 외부에서 설정을 테스트하려면 이 문서의 뒷부분에 나오는 테스트를 위한 사용자 풀 액세스 토큰 가져오기를 참조하십시오.
  2. 권한 부여자를 API와 통합하려면 메서드에서 COGNITO_USER_POOLS 권한 부여자를 구성하려면 아래의 지침을 따릅니다.
    참고: [OAuth Scopes]에 사용자 지정 범위의 전체 식별 자를 resourceServerIdentifier/scopeName 형식으로 입력합니다.
  3. API를 배포합니다.

테스트를 위한 사용자 풀 액세스 토큰 가져오기

사용자 풀에 호스팅된 웹 UI를 사용하여 로그인하고 Amazon Cognito 권한 부여 서버에서 액세스 토큰을 검색합니다. 또는 모바일 및 웹 AWS SDK에서 제공되는 OAuth 2.0 엔드포인트 구현을 사용하여 액세스 토큰을 검색합니다.

참고: 앱 클라이언트가 호스팅된 웹 UI를 통해 인증을 요청하는 경우, 요청에 시스템 예약 범위 또는 리소스 서버에서 정의한 사용자 지정 범위의 조합이 포함될 수 있습니다. 클라이언트가 범위를 요청하지 않는 경우, 인증 서버는 클라이언트와 연결된 모든 범위를 포함하는 액세스 토큰을 반환합니다. 앱 클라이언트를 설계할 때 불필요한 권한을 부여하지 않도록 요청에 의도한 범위를 포함해야 합니다.

  1. 웹 브라우저에 다음 URL을 입력합니다.
    https://yourDomainPrefix.auth.region.amazoncognito.com/login?response_type=token&client_id=yourClientId&redirect_uri=redirectUrl
    참고: yourDomainPrefixregion은 실제 사용자 풀의 값으로 바꾸십시오. 이 값은 Amazon Cognito 콘솔에서 해당 사용자 풀에 대한 [도메인 이름(Domain name)] 탭에서 찾을 수 있습니다.
    yourClientId는 앱 클라이언트의 ID로, redirectUrl은 앱 클라이언트의 콜백 URL로 각각 바꾸십시오. 해당 정보는 콘솔에서 사용자 풀에 대한 [앱 클라이언트 설정(App client settings)] 탭에서 찾을 수 있습니다. 자세한 내용은 로그인 엔드포인트를 참조하십시오.
  2. 생성한 사용자로 사용자 풀에 로그인합니다.
  3. 주소 표시줄의 URL에서 액세스 토큰을 복사합니다. 토큰은 access_token= 다음에 오는 긴 문자열입니다.

API를 테스트로 호출

테스트로서 액세스 토큰을 권한 부여 헤더의 값으로 사용하여 API를 호출합니다. 명령줄 인터페이스에서 curl을 사용하거나 Postman 앱을 사용할 수 있습니다. curl에 대한 자세한 내용은 cURL 프로젝트 웹 사이트를 참조하십시오.

curl을 사용하려면 다음 명령을 실행합니다.

curl https://restApiId.execute-api.region.amazonaws.com/stageName/resourceName -H "Authorization: accessToken"

참고: restApiId를 API ID로 바꿉니다. region을 API의 AWS 지역으로 바꿉니다. stageName을 API가 배포된 단계 이름으로 교체합니다.오. resourceName을 API 리소스의 이름으로 바꿉니다. accessToken을 복사한 토큰으로 바꿉니다. 자세한 내용은 Amazon API Gateway에서 REST API 호출을 참조하십시오.

모든 것이 올바르게 구성되면 200 OK 응답 코드가 표시됩니다.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?