Amazon Cognito 사용자 풀을 API Gateway REST API에서 권한 부여자로 설정하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 3월 30일

Amazon API Gateway REST API에서 권한 부여자로 Amazon Cognito 사용자 풀을 설정하려고 합니다. 어떻게 해야 합니까?

간략한 설명

API Gateway REST API에서 Amazon Cognito 사용자 풀을 권한 부여자로 설정하는 방법에는 두 가지가 있습니다.

권한 부여를 위해 ID 토큰 또는 액세스 토큰을 사용할 수 있습니다. 자세한 내용은 사용자 풀을 통해 토큰 사용을 참조하세요.

참고: Amazon Cognito에서 발행한 액세스 토큰ID 토큰의 클레임 (및 추가 클레임)을 확인하려면 Lambda 권한 부여자를 사용합니다. 액세스 토큰을 사용하여 API 메서드 호출 권한을 부여하는 경우 Amazon Cognito의 사용자 지정 범위를 사용하여 API에 대한 액세스 권한을 부여해야 합니다.

자세한 내용은 사용자 풀에 대한 리소스 서버 정의REST API에 대한 Amazon Cognito 사용자 풀 생성을 참조하세요.

해결 방법

다음 절차에서는 COGNITO_USER_POOLS 권한 부여자를 생성하는 방법을 보여 줍니다. 이 예에서는 이미 두 가지를 생성했다고 가정합니다.

COGNITO_USER_POOLS 권한 부여자 생성

자세한 내용은 REST API와 Amazon Cognito 사용자 풀 통합을 참조하세요.

새로운 COGNITO_USER_POOLS 권한 부여자 테스트

COGNITO_USER_POOLS 권한 부여자를 생성한 후 다음을 수행합니다.

1.    API Gateway 콘솔에서 새 권한 부여자 아래에 있는 [테스트(Test)] 버튼을 선택합니다.

2.    [테스트(Test)] 창에서 [권한 부여(Authorization)]에 새 Amazon Cognito 사용자 풀의 ID 토큰을 입력합니다.

3.    [테스트(Test)]를 선택합니다.

참고: ID 토큰이 올바른 경우 테스트는 200 응답 코드를 반환합니다. ID 토큰이 잘못된 경우 401 응답 코드를 반환합니다.

API 메서드에서 COGNITO_USER_POOLS 권한 부여자를 구성합니다.

자세한 내용은 REST API와 Amazon Cognito 사용자 풀 통합메서드에서 COGNITO_USER_POOLS 권한 부여자 구성 섹션을 참조하세요.

권한 부여 토큰 받기

권한 부여 토큰을 받는 방법에는 네 가지가 있습니다.

참고: Amazon Cognito의 호스팅 웹 UI와 권한 부여 코드 부여 유형을 사용하는 경우 획득한 코드를 토큰 엔드포인트와 교환해야 할 수 있습니다.

암시적 부여 유형을 사용하는 경우 콜백 URL에서 부여를 받을 수 있습니다. 콜백 URL에 암시적 흐름에 대한 액세스 토큰 및 ID 토큰 파라미터가 추가됩니다. 사용하도록 선택한 토큰 유형에 따라 올바른 토큰을 사용해야 합니다.

Amazon Cognito의 호스팅 웹 UI를 사용하여 권한 부여 토큰을 받으려면

권한 부여 코드 부여 흐름을 사용하려면 다음을 수행합니다.

참고: 권한 부여 코드 부여 흐름을 사용할 때 응답 유형 파라미터는 “code”여야 합니다.

1.    다음 URL로 HTTP GET 요청을 보냅니다.

중요: <your_domain>을 사용자 풀의 도메인 이름으로 바꿉니다. <your_app_client_id>를 사용자 풀의 앱 클라이언트 ID로 바꿉니다. <your_callback_url>콜백 URL로 바꿉니다.

https://<your_domain>/authorize?response_type=code&client_id=<your_app_client_id>&redirect_uri<your_callback_url>

참고: identity_provider 파라미터를 포함하면 엔드포인트가 연동 자격 증명 공급자로 리디렉션됩니다. 앱 클라이언트가 Amazon Cognito 사용자 풀에만 사용하도록 구성된 경우 다음 엔드포인트가 /login 엔드포인트로 리디렉션됩니다.

https://<your_domain>/login?response_type=code&client_id=<your_app_client_id>&redirect_uri=<your_callback_url>

2.    사용자 풀 또는 연동 ID 공급자에 로그인합니다. UI는 앱 클라이언트의 콜백에 지정된 URL로 리디렉션됩니다.

중요: 리디렉션 URL에는 유효한 토큰을 얻기 위해 토큰 엔드포인트와 교환해야 하는 권한 부여 코드가 포함되어 있습니다.

3.    /oauth2/token 엔드포인트에 HTTP POST 요청을 보냅니다. 자세한 내용은 토큰 엔드포인트를 참조하세요.

HTTP POST 요청 예

참고: 다음 예제 HTTP POST 요청은 다음과 같은 /oauth2/token 엔드포인트를 사용합니다. https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token&

Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic aSdxd892iujendek328uedj
grant_type=authorization_code&
client_id=djc98u3jiedmi283eu928&
code=AUTHORIZATION_CODE&
redirect_uri=com.myclientapp://myclient/redirect

HTTP POST 요청 응답 예

HTTP/1.1 200 OKContent-Type: application/json
{ 
"access_token":"eyJz9sdfsdfsdfsd", 
"refresh_token":"dn43ud8uj32nk2je", 
"id_token":"dmcxd329ujdmkemkd349r",
"token_type":"Bearer", 
"expires_in":3600
}

암시적 부여 흐름을 사용하려면 다음을 수행합니다.

참고: 암시적 부여 흐름을 사용할 때 응답 유형 파라미터는 “token”이어야 합니다.

1.    다음 URL로 HTTP GET 요청을 보냅니다

중요: <your_domain>사용자 풀의 도메인 이름으로 바꿉니다. <your_app_client_id>를 사용자 풀의 앱 클라이언트 ID로 바꿉니다. <your_callback_url>을 콜백 URL로 바꿉니다.

https://<your_domain>/authorize?response_type=token&client_id=<your_app_client_id> &redirect_uri=<your_callback_url>

참고: identity_provider 파라미터를 포함하면 엔드포인트가 연동 자격 증명 공급자로 리디렉션됩니다. 앱 클라이언트가 Amazon Cognito 사용자 풀에만 사용하도록 구성된 경우 다음 엔드포인트가 /login 엔드포인트로 리디렉션됩니다.

https://<your_domain>/login?response_type=token&client_id=<your_app_client_id> &redirect_uri=<your_callback_url>

2.    기존 사용자의 사용자 이름과 암호를 사용하여 사용자 풀에 로그인하거나 로그인할 새 사용자를 만듭니다. UI는 앱 클라이언트의 콜백에 지정된 URL로 리디렉션됩니다.

참고: 리디렉션 URL에는 ID 토큰액세스 토큰이 포함됩니다.

리디렉션 URL 예

https://www.example.com/#id_token=123456789idtoken123456789&access_token=123456789accesstoken123456789expires_in=3600&token_type=Bearer

AWS CLI를 사용하여 권한 부여 토큰을 받으려면

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

다음 initiate-auth AWS CLI 명령을 실행합니다.

중요: 다음 값을 사용 중인 입력으로 바꿉니다. auth-flow, --client-id--auth-parameters

aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=testuser,PASSWORD=P@ssw0rd --client-id <app client id>

initiate-auth AWS CLI 명령 응답 예

Response: {
"AuthenticationResult": {
"ExpiresIn": 3600,
"IdToken": "dmcxd329ujdmkemkd349r",
"RefreshToken": "dn43ud8uj32nk2je"",
"TokenType": "Bearer",
"AccessToken": "eyJz9sdfsdfsdfsd"
},
"ChallengeParameters":
            {} 
}

AWS SDK 중 하나를 사용하여 인증 토큰을 받으려면

자세한 내용은 Amazon Cognito와 웹 및 모바일 앱 통합을 참조하세요.

Postman을 사용하여 인증 토큰을 받으려면

Postman에서 Oauth 2.0 권한 부여 모드를 사용하여 권한 부여 토큰을 받습니다. 자세한 내용은 Amazon Cognito 사용자 풀을 설정한 후 API Gateway REST API 엔드포인트에서 “401 권한 없음(401 Unauthorized)” 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.