Amazon Cognito 사용자 풀의 사용자 지정 범위를 사용하여 내 Amazon API Gateway API 리소스에 대한 액세스 권한을 부여하고 싶습니다.
간략한 설명
Amazon Cognito 사용자 풀에서 사용자 지정 범위로 리소스 서버를 정의하세요. 그런 다음 API 리소스에 대한 요청을 인증하기 위해 API 게이트웨이 API에 대한 Amazon Cognito 권한 부여자를 만들고 구성합니다.
API 리소스에 대한 다양한 수준의 액세스가 필요한 앱 클라이언트가 여러 개 있는 경우 액세스 범위를 다르게 정의할 수 있습니다.
서로 다른 앱 클라이언트에 필요한 세분화된 액세스 수준을 고려한 다음 그에 따라 설계하세요.
해결 방법
다음 전제 조건을 만듭니다.
사용자 풀에 사용자 지정 범위가 있는 리소스 서버 추가하기
1. Amazon Cognito 콘솔을 엽니다.
-
리소스 서버 및 사용자 지정 범위를 정의합니다.
-
리소스 서버를 생성한 후 앱 통합 탭을 선택합니다.
-
앱 클라이언트 및 분석 섹션에서 앱 클라이언트를 선택합니다.
-
호스팅된 UI 섹션에서 편집을 선택합니다.
다음 단계를 완료합니다.
OAuth 2.0 권한 부여 유형 드롭다운 목록에서 암시적 권한 부여를 선택합니다.
사용자 지정 범위 드롭다운 목록에서 정의한 사용자 지정 범위를 선택합니다.
참고: 사용자 지정 범위의 형식은 resourceServerIdentifier/scopeName입니다.
클라이언트가 OAuth 2.0 플로우에서 사용자 지정 범위를 요청할 때 요청에 이 형식의 범위 전체 식별자를 포함해야 합니다.
- 변경 사항 저장을 선택합니다.
모바일 애플리케이션에 서버 측 구성 요소가 있는 경우 인증 코드 권한 부여 흐름 및 PKCE(Proof Key for Code Exchange)를 사용합니다.
인증 코드 권한 부여 흐름을 사용하면 토큰이 더 안전하며 최종 사용자에게 직접 노출되지 않습니다.
설정에 서버 측 로직이 포함되어 있지 않은 경우 암시적 권한 부여 흐름을 사용할 수 있습니다.
암시적 부여는 새로 고침 토큰을 생성하지 않습니다.
따라서 새로 고침 토큰이 클라이언트에 노출되는 것을 방지할 수 있습니다.
새로 고침 토큰은 유효 기간이 더 길고 최신 ID 및 액세스 토큰을 검색합니다.
**중요:**새로 고침 토큰을 클라이언트측 환경에 저장하지 마세요.
자세한 내용은 앱 클라이언트 설정 용어를 참조하세요.
Amazon Cognito 사용자 풀 OAuth 2.0 권한 부여에 대한 자세한 내용은 Amazon Cognito 사용자 풀 OAuth 2.0 권한 부여 이해를 참조하세요.
권한 부여자를 생성하여 API와 통합
다음 단계를 완료하려면 지침에 따라 REST API를 Amazon Cognito 사용자 풀과 통합하기를 참조하세요.
- API 게이트웨이 콘솔을 사용하여 COGNITO_USER_POOLS 권한 부여자를 만들려면 아래의 지침을 따릅니다.
참고: 생성 후 콘솔에 권한 부여자를 테스트하는 옵션이 나타납니다.
여기에는 ID 토큰이 필요합니다. 액세스 토큰을 사용하여 콘솔 외부에서 설정을 테스트하려면 이 문서의 테스트용 사용자 풀 액세스 토큰 가져오기 섹션을 참조하세요.
- 권한 부여자를 API와 통합하기 위해 메서드에서 COGNITO_USER_POOLS 권한 부여자를 구성하려면 아래의 지침을 따르세요.
참고: OAuth Scopes의 경우, 사용자 지정 범위에 대한 전체 식별자를 resourceServerIdentifier/scopeName 형식으로 입력합니다.
3. API를 배포하세요.
테스트를 위한 사용자 풀 액세스 토큰 가져오기
사용자 풀에 대해 호스팅된 웹 UI를 사용하여 로그인하고 Amazon Cognito 인증 서버에서 액세스 토큰을 검색합니다.
또는 모바일 및 웹 AWS SDK에서 사용할 수 있는 OAuth 2.0 엔드포인트 구현을 사용하여 액세스 토큰을 검색합니다.
참고: 앱 클라이언트가 호스팅된 웹 UI를 통해 인증을 요청할 때 요청에는 system-reserved scopes 또는 사용자 지정 범위의 모든 조합이 포함될 수 있습니다.
클라이언트가 범위를 요청하지 않으면 인증 서버는 클라이언트와 연결된 모든 범위가 포함된 액세스 토큰을 반환합니다.
앱 클라이언트를 디자인할 때 불필요한 권한이 부여되지 않도록 클라이언트가 요청에 의도한 범위를 포함해야 합니다.
1. 웹 브라우저에 다음 URL을 입력합니다.
https://yourDomainPrefix.auth.region.amazoncognito.com/login?response_type=token&client_id=yourClientId&redirect_uri=redirectUrl
참고: yourDomainPrefix 및 region을 사용자 풀의 값으로 바꿉니다.
사용자 풀의 도메인 이름 탭의 Amazon Cognito 콘솔에서 해당 값을 찾습니다.
yourClientId를 앱 클라이언트의 ID로 바꾸고, redirectUrl를 앱 클라이언트의 콜백 URL로 바꿉니다.
콘솔에서 사용자 풀의 앱 클라이언트 설정 탭에서 이를 찾습니다.
자세한 내용은 로그인 엔드포인트를 참조하세요.
2. 생성한 사용자로 사용자 풀에 로그인합니다.
- 주소 표시줄의 URL에서 액세스 토큰을 복사합니다.
토큰은 access_token= 다음에 오는 긴 문자열입니다.
테스트용으로 API 호출하기
테스트용으로 액세스 토큰을 인증 헤더의 값으로 사용하여 액세스 토큰을 사용하여 API를 호출합니다.
Postman 앱(Postman 웹사이트)을 사용하거나 명령줄 인터페이스에서 curl 명령을 사용할 수 있습니다.
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 응답 코드가 표시됩니다.
관련 정보
사용자 풀 앱 클라이언트 구성
액세스 토큰 범위(OAuth 2.0 인증 프레임워크)