Amazon Cognito 사용자 풀을 API Gateway REST API에서 권한 부여자로 설정하려면 어떻게 해야 합니까?
Amazon API Gateway REST API에서 권한 부여자로 Amazon Cognito 사용자 풀을 설정하려고 합니다.
간략한 설명
API Gateway REST API에서 Amazon Cognito 사용자 풀을 권한 부여자로 설정하는 방법에는 두 가지가 있습니다.
권한 부여를 위해 ID 토큰 또는 액세스 토큰을 사용할 수 있습니다. 액세스 토큰으로 Amazon Cognito에서 사용자 지정 범위를 사용하여 API Gateway API에 대한 액세스 권한을 부여할 수 있습니다. Lambda 권한 부여자는 Amazon Cognito에서 발행한 ID 토큰 및 액세스 토큰의 클레임을 검증할 수 있습니다.
자세한 내용은 다음 주제를 참조하세요.
해결 방법
다음 절차에서는 COGNITO_USER_POOLS 권한 부여자를 생성하는 방법을 보여 줍니다. 이 예에서는 이미 두 가지를 생성했다고 가정합니다.
COGNITO_USER_POOLS 권한 부여자 생성
자세한 내용은 REST API와 Amazon Cognito 사용자 풀 통합을 참조하세요. API Gateway 콘솔을 사용하여 COGNITO_USER_POOLS 권한 부여자를 생성하려면 해당 섹션의 지침을 따릅니다.
새로운 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를 구성합니다.
- AWS Command Line Interface(AWS CLI)를 사용하세요.
- AWS SDK 중 하나를 사용하세요.
- Postman 앱을 사용합니다.
참고: 애플리케이션이 코드를 토큰 엔드포인트로 교환할 수 있도록 권한 부여 코드를 부여할 수 있는 Amazon Cognito 호스팅 UI를 설정하십시오.
암시적 부여 유형을 사용하는 경우 콜백 URL에서 부여를 받을 수 있습니다. 콜백 URL에 암시적 흐름에 대한 액세스 토큰 및 ID 토큰 파라미터가 추가됩니다. 올바른 토큰 유형을 사용하는지 확인하세요.
Amazon Cognito의 호스팅 UI를 사용하여 권한 부여 토큰을 받으려면
권한 부여 코드 부여 흐름을 사용하려면 다음을 수행합니다.
참고: 권한 부여 코드 부여 흐름을 사용할 때 응답 유형 파라미터는 **"code"**여야 합니다.
1. 권한 부여 코드 부여를 위한 GET 요청 보내기:
중요: example_****domain을 사용자 풀의 도메인 이름으로 바꿉니다. example_****app_client_id를 사용자 풀의 앱 클라이언트 ID로 바꿉니다. example_callback_url을 콜백 URL로 바꿉니다.
https://example_domain/oauth2/authorize?response_type=code&client_id=example_app_client_id&redirect_uri=example_callback_url
참고: identity_provider 파라미터를 포함하여 엔드포인트가 연동 자격 증명 공급자로 리디렉션되도록 합니다. 앱 클라이언트가 Amazon Cognito 사용자 풀에만 사용하도록 구성된 경우 다음 엔드포인트가 /login 엔드포인트로 리디렉션됩니다.
https://example_domain/login?response_type=code&client_id=example_app_client_id&redirect_uri=example_callback_url
2. 사용자 풀 또는 연동 ID 공급자에 로그인합니다. 사용자 인터페이스는 앱 클라이언트의 콜백에 지정된 URL로 리디렉션됩니다.
중요: 리디렉션 URL에는 유효한 토큰을 얻기 위해 토큰 엔드포인트와 교환해야 하는 권한 부여 코드가 포함되어 있습니다.
3. /oauth2/token 엔드포인트에 POST 요청을 전송하여 권한 부여 코드를 토큰으로 교환합니다. 자세한 내용은 토큰 엔드포인트를 참조하세요.
권한 부여 코드를 토큰으로 교환하기 위한 POST 요청의 예
참고: 예제 POST 요청은 다음과 같은 /oauth2/token 엔드포인트를 사용합니다. https://example_domain.auth.us-east-1.amazoncognito.com/oauth2/token&
Content-Type='application/x-www-form-urlencoded'& Authorization=Basic ZXhhbXBsZTEyMzQ1Njc4OTA6enl4OTh3N3l2dHNycTY1NHBvMzIx grant_type=authorization_code& client_id=example1234567890& code=AUTHORIZATION_CODE& redirect_uri=com.myclientapp://myclient/redirect
POST 요청 응답 예
HTTP/1.1 200 OK Content-Type: application/json { "access_token":"abCde1example", "id_token":"abCde2example", "refresh_token":"abCde3example", "token_type":"Bearer", "expires_in":3600 }
암시적 부여 흐름을 사용하려면 다음을 수행합니다.
참고: 암시적 부여 흐름을 사용할 때 응답 유형 파라미터는 **“token”**이어야 합니다.
1. 암시적 권한 부여를 위한 GET 요청 보내기:
중요: example_****domain을 사용자 풀의 도메인 이름으로 바꿉니다. example_app_client_id를 사용자 풀의 앱 클라이언트 ID로 바꿉니다. example_callback_url을 콜백 URL로 바꿉니다.
https://example_domain/oauth2/authorize?response_type=token&client_id=example_app_client_id&redirect_uri=example_callback_url
참고: identity_provider 파라미터를 포함하여 엔드포인트가 연동 자격 증명 공급자로 리디렉션되도록 합니다. 앱 클라이언트가 Amazon Cognito 사용자 풀에만 사용하도록 구성된 경우 다음 엔드포인트가 /login 엔드포인트로 리디렉션됩니다.
https://example_domain/login?response_type=token&client_id=example_app_client_id&redirect_uri=example_callback_url
2. 기존 사용자의 사용자 이름과 암호를 사용하여 사용자 풀에 로그인하거나 로그인할 새 사용자를 만듭니다. 사용자 인터페이스는 앱 클라이언트의 콜백에 지정된 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 명령을 실행하여 권한 부여 토큰을 가져옵니다.
중요: example_****사용자를 사용자 이름으로, example_password를 암호로, example_app_client_id를 앱 클라이언트 ID로 바꾸세요.
aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=example_user,PASSWORD=example_password --client_id example_app_client_id
initiate-auth AWS CLI 명령 응답 예
{ "AuthenticationResult": { "AccessToken": "abCde1example", "IdToken": "abCde2example", "RefreshToken": "abCde3example", "TokenType": "Bearer", "ExpiresIn": 3600 }, "ChallengeParameters": {} }
AWS SDK 중 하나를 사용하여 인증 토큰을 받으려면
자세한 내용은 Amazon Cognito와 웹 및 모바일 앱 통합을 참조하세요.
Postman을 사용하여 인증 토큰을 받으려면
Postman에서 OAuth 2.0 권한 부여 모드를 사용하여 권한 부여 토큰을 받습니다. 자세한 내용은 Lambda 권한 부여자를 생성한 후 API Gateway 401 Unauthorized 오류가 발생하는 이유는 무엇입니까?를 참조하세요.
Amazon Cognito 사용자 풀에서 OAuth 2.0 사용자 지정 범위를 구성하고 API 게이트웨이에서 범위를 확인합니다.
범위는 앱이 리소스에 요청할 수 있는 액세스 수준을 제공합니다. Amazon Cognito에는 사용자 풀과 연결된 앱 클라이언트를 허용하도록 구성할 수 있는 OAuth 범위가 내장되어 있습니다. Amazon Cognito의 내장 범위에 대한 자세한 내용은 앱 클라이언트 설정 용어를 참조하세요.
사용자 지정 범위는 OAuth 2.0 리소스 서버와 연결할 수 있습니다. 리소스 서버에 대한 자세한 내용은 사용자 풀의 리소스 서버 정의를 참조하세요.
Amazon Cognito를 API 게이트웨이와 함께 사용하면 Amazon Cognito 권한 부여자가 요청을 인증하고 리소스를 보호합니다. Amazon Cognito 및 API Gateway에서 사용자 지정 범위를 사용하면 API 리소스에 대한 차별화된 수준의 액세스를 제공할 수 있습니다. 또한 리소스를 노출하여 액세스 토큰 범위를 얻을 때 더 높은 수준의 제어가 가능합니다.
사용자 풀에서 리소스 서버 및 OAuth 2.0 사용자 지정 범위 구성
1. 사용자 풀의 리소스 서버 및 사용자 지정 범위를 정의합니다.
리소스 서버 식별자의 경우 리소스가 위치한 API Gateway의 HTTPS 엔드포인트를 입력합니다.
2. 필요한 경우 사용자 풀 앱 클라이언트를 구성한 다음 앱 클라이언트 설정에서 사용자 지정 범위를 추가합니다.
참고: 사용자 지정 범위 이름은 resourceServerIdentifier/scopeName의 형식이 지정됩니다.
클라이언트 앱이 OAuth 2.0 흐름에서 사용자 지정 범위를 요청하는 경우, 클라이언트 앱은 반드시 범위에 대한 전체 식별자를 요청해야 합니다. 예를 들어 리소스 서버 식별자가 https://myresourceserver.example.com이고 범위 이름이 resources.read인 경우 클라이언트 앱은 런타임에 https://myresourceserver.example.com/resources.read을 요청해야 합니다.
API 게이트웨이에서 OAuth 2.0 사용자 지정 범위 확인
1. REST API와 Amazon Cognito 사용자 풀 통합을 참조하세요.
2. API Gateway 콘솔에서 REST API를 선택합니다.
3. 리소스 창에서 메서드 이름을 선택합니다.
4. 메서드 요청 구성을 선택합니다.
5. 권한 부여 드롭다운 목록에서 Cognito 권한 부여자를 선택합니다. 그러면 OAuth Scopes라는 새 필드가 자동으로 추가됩니다.
6. OAuth Scopes 필드에 앞서 언급한 형식으로 사용자 지정 범위의 전체 식별자를 입력합니다. 예를 들어, https://myresourceserver.example.com/resources.read형식으로 입력하시면 됩니다.
7. API를 저장하고 배포합니다.
Postman 또는 CURL을 사용하여 설정을 테스트합니다.
1. 클라이언트에 정의된 OAuth 2.0 흐름 중 하나를 사용하여 Amazon Cognito 인증 서버에서 액세스 토큰을 가져옵니다.
2. 요청에서 권한 부여 헤더로 받은 수신 액세스 토큰을 API Gateway로 보냅니다.
3. 모든 작업이 성공하고 API Gateway가 액세스 토큰과 사용자 지정 범위를 검증하고 확인하면 200 OK 응답을 받게 됩니다.
관련 정보
Amazon Cognito 연동 자격 증명, Amazon Cognito 사용자 풀 및 Amazon API Gateway를 통한 API 액세스 보안

관련 콘텐츠
- 질문됨 2달 전lg...
- 질문됨 5년 전lg...
- 질문됨 3달 전lg...