Amazon Cognito 사용자 풀의 사용자 지정 범위를 사용하여 내 Amazon API Gateway API 리소스에 대한 액세스 권한을 부여하고 싶습니다.
간략한 설명
Amazon Cognito 사용자 풀에서 사용자 지정 범위로 리소스 서버를 정의하십시오. 그런 다음, API 리소스에 대한 요청을 인증하기 위해 API Gateway 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 Gateway 콘솔을 사용하여 COGNITO_USER_POOLS 권한 부여자 만들기 아래의 설명을 따릅니다.
참고: 만든 후 콘솔에 권한 부여자를 테스트하는 옵션이 표시됩니다.
여기에는 ID 토큰이 필요합니다. 액세스 토큰을 사용하여 콘솔 외부에서 설정을 테스트하려면 이 문서의 테스트용 사용자 풀 액세스 토큰 가져오기 섹션을 참조하십시오.
- 권한 부여자를 API와 통합하려면 메서드에서 COGNITO_USER_POOLS 권한 부여자 구성 아래의 설명을 따릅니다.
참고: OAuth 범위의 경우, 사용자 지정 범위에 대한 전체 식별자를 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
참고: 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 권한 부여 프레임워크)