사용자 풀의 리소스 서버 정의 - Amazon Cognito

사용자 풀의 리소스 서버 정의

사용자 풀에 대한 도메인을 구성한 후 Amazon Cognito는 앱에서 사용자에게 표시할 수 있는 등록 및 로그인 페이지가 포함된 호스팅 웹 UI를 자동으로 프로비저닝합니다. 자세한 정보는 2단계. 앱 클라이언트 추가 및 호스팅 UI 설정 단원을 참조하세요.

리소스 서버OAuth 2.0 API 서버입니다. 액세스 보호 리소스를 보호하기 위해 앱에서 액세스 토큰을 확인하고 API에 대한 액세스를 승인합니다. 토큰 서명, 토큰 만료에 따른 유효성 및 토큰 클레임의 범위에 따라 액세스 수준을 기반으로 발급자를 확인합니다.

리소스 서버 API는 데이터베이스의 정보에 대한 액세스 권한을 부여하거나 IT 리소스를 제어할 수 있습니다. Amazon Cognito 액세스 토큰은 OAuth 2.0을 지원하는 API에 대한 액세스 권한을 부여할 수 있습니다. Amazon API Gateway REST API에는 Amazon Cognito 액세스 토큰을 통한 권한 부여 지원 기능이 내장되어 있습니다. 앱은 API 호출 시 액세스 토큰을 리소스 서버로 전달합니다. 앱은 액세스 요청 시 토큰을 전달할 때 액세스 토큰을 사용자가 볼 수 없게 처리해야 합니다. 리소스 서버는 액세스 토큰을 검사하여 액세스 권한을 부여할지 여부를 결정합니다.

참고

리소스 서버는 토큰 내에서 클레임을 처리하기 앞서 액세스 토큰 서명과 만료 날짜를 확인해야 합니다. 사용자 풀 토큰을 확인하고 사용하는 방법에 대한 자세한 내용은 AWS 블로그API Gateway와 Amazon Cognito 사용자 풀 통합을 참조하세요. Amazon API Gateway는 액세스 토큰을 검사하여 리소스를 보호하는 데 적합한 옵션입니다. API Gateway Lambda 권한 부여자에 대한 자세한 내용은 API Gateway Lambda 권한 부여자 사용을 참조하세요.

범위는 앱이 리소스에 요청할 수 있는 액세스의 수준입니다. 예를 들어 사진에 대한 리소스 서버를 가지고 있는 경우에는 두 개의 범위를 정의하게 되는데, 하나는 사진에 대한 읽기 액세스를 위한 범위이고 다른 하나는 쓰기/삭제 액세스를 위한 범위입니다. 앱이 액세스 요청을 위해 API 호출을 수행하고 액세스 토큰을 전달하는 경우 토큰 내부에 하나 이상의 범위가 포함됩니다.

개요

Amazon Cognito를 사용하여 앱 개발자는 자체 OAuth2.0 리소스 서버를 생성하고 사용자 지정 범위를 리소스 서버와 연결할 수 있습니다. 사용자 지정 범위를 앱 클라이언트와 연결하면 앱이 Token 엔드포인트에서 OAuth2.0 인증 코드 권한 부여, 암시적 권한 부여 및 클라이언트 자격 증명 권한 부여에서 해당 범위를 요청할 수 있습니다. Amazon Cognito는 액세스 토큰의 scope 클레임에서 사용자 지정 범위를 전달합니다. 클라이언트는 리소스 서버에 대해 액세스 토큰을 사용할 수 있습니다. 리소스 서버는 토큰에 있는 범위를 기준으로 권한 부여를 결정합니다. 액세스 토큰 범위에 대한 자세한 내용은 사용자 풀을 통해 토큰 사용을 참조하세요.


            리소스 서버의 흐름에 대한 개요입니다. 클라이언트는 사용자 지정 범위의 권한 부여를 요청하고 사용자 풀은 사용자 지정 범위의 액세스 토큰을 반환하며 클라이언트는 액세스 토큰을 API에 제공합니다.

사용자 지정 범위가 있는 액세스 토큰을 얻으려면 앱에서 Token 엔드포인트에 요청하여 인증 코드를 사용하거나 클라이언트 자격 증명 권한 부여를 요청해야 합니다. 호스팅 UI에서 암시적 권한 부여에서 액세스 토큰의 사용자 지정 범위를 요청할 수도 있습니다.

참고

인간 대화형 인증을 위해 설계되었기 때문에 InitiateAuthAdminInitiateAuth 요청은 사용자 지정 범위를 포함하지 않는 액세스 토큰을 생성합니다.

리소스 서버 및 사용자 지정 범위 관리

리소스 서버를 생성할 때 반드시 리소스 서버 이름과 리소스 서버 식별자를 제공해야 합니다. 리소스 서버에서 생성한 각 범위에 대해 범위 이름과 설명을 입력해야 합니다.

예제:

  • Name: Weather API 또는 Photo API 같은 친숙한 리소스 서버 이름입니다.

  • Identifier: 리소스 서버의 고유 식별자입니다. 리소스 서버가 있는 HTTPS 엔드포인트일 수 있습니다. 예: https://my-weather-api.example.com

  • Scope Name: 범위 이름입니다. 예: weather.read

  • Scope Description: 범위에 대한 간략한 설명입니다. 예: Retrieve weather information.

클라이언트 앱이 OAuth2.0 흐름에서 사용자 지정 범위를 요청할 때는 범위 resourceServerIdentifier/scopeName에 대한 완전한 식별자를 요청해야 합니다. 예를 들어 리소스 서버 식별자가 https://myphotosapi.example.com이고 범위 이름이 photos.read이면 클라이언트 앱은 런타임 시 https://myphotosapi.example.com/photos.read를 요청해야 합니다.

리소스 서버에서 범위를 삭제해도 모든 클라이언트와 범위의 연결은 삭제되지 않습니다. 대신, 범위가 비활성으로 표시됩니다. 클라이언트 앱이 런타임에 삭제된 범위를 요청하는 경우 해당 범위가 무시되고 액세스 토큰에 포함되지 않습니다. 나중에 해당 범위를 다시 추가하면 액세스 토큰에 범위가 다시 포함됩니다.

클라이언트에서 범위가 삭제된 경우에는 클라이언트와 범위 간의 연결이 삭제됩니다. 클라이언트가 런타임에 허용되지 않는 범위를 요청하면 오류가 반환되고 액세스 토큰이 발급되지 않습니다.

AWS Management Console, API 또는 CLI를 사용하여 사용자 풀의 리소스 서버와 범위를 정의할 수 있습니다.

사용자 풀의 리소스 서버 정의(AWS Management Console)

AWS Management Console을 사용하여 사용자 풀의 리소스 서버를 정의할 수 있습니다.

Original console

리소스 서버를 정의하려면

  1. Amazon Cognito 콘솔에 로그인합니다. 메시지가 표시되면 AWS 자격 증명을 입력합니다.

  2. 탐색 창에서 [사용자 풀 관리(Manage User Pools)]를 선택한 다음 편집할 사용자 풀을 선택합니다.

  3. 리소스 서버 탭을 선택합니다.

  4. 리소스 서버 추가를 선택합니다.

  5. 리소스 서버의 이름을 입력합니다. 예: Photo Server.

  6. 리소스 서버의 식별자를 입력합니다. 예: com.example.photos.

  7. readwrite와 같이 리소스에 대한 사용자 지정 범위의 이름을 입력합니다.

  8. 각 [범위 이름(Scope name)]에 대한 설명을 입력합니다(예: view your photos, update your photos).

  9. [Save changes]를 선택합니다.

정의하는 각 사용자 정의 범위는 [앱 클라이언트 설정(App client settings)] 탭의 [OAuth2.0 허용된 사용자 정의 범위(OAuth2.0 Allowed Custom Scopes)] 아래에 표시됩니다(예: com.example.photos/read).

New console

리소스 서버를 정의하려면

  1. Amazon Cognito 콘솔에 로그인합니다.

  2. 탐색 창에서 [사용자 풀(User Pools)]을 선택한 다음 편집할 사용자 풀을 선택합니다.

  3. [앱 통합(App integration) 탭을 선택하고 [리소스 서버(Resource servers)]를 찾습니다.

  4. [리소스 서버 생성(Create a resource server)]을 선택합니다.

  5. [리소스 서버 이름(Resource server name)]을 입력합니다. 예: Photo Server.

  6. [리소스 서버 식별자(Resource server identifier)]를 입력합니다. 예: com.example.photos.

  7. 리소스에 대한 [사용자 정의 범위(Custom scopes)]를 입력합니다(예: read, write).

  8. 각 [범위 이름(Scope name)]에 대한 [설명(Description)]을 입력합니다(예: view your photos, update your photos).

  9. 생성(Create)을 선택합니다.

사용자 정의 범위는 [앱 통합(App integration)] 탭의 [리소스 서버(Resource servers)] 아래에 있는 [사용자 정의 범위(Custom scopes)] 열에서 검토할 수 있습니다. [앱 통합(App integration)] 탭의 [앱 클라이언트(App clients)]에서 앱 클라이언트에 사용자 정의 범위를 사용하도록 설정할 수 있습니다. 앱 클라이언트를 선택하고 [호스트된 UI 설정(Hosted UI settings)]을 찾은 다음, [편집(Edit)]을 선택합니다. [사용자 정의 범위(Custom scopes)]를 추가하고 [변경 사항 저장(Save changes)]을 선택합니다.

사용자 풀의 리소스 서버 정의(AWS CLI 및 AWS API)

다음 명령을 사용하여 사용자 풀에 대한 리소스 서버 설정을 지정합니다.

리소스 서버를 생성하려면

리소스 서버 설정에 대한 정보를 가져오려면

사용자 풀의 모든 리소스 서버에 대한 정보를 나열하려면

리소스 서버를 삭제하려면

리소스 서버의 설정을 업데이트하려면