리소스 서버를 통한 범위, M2M 및 API 권한 부여 - Amazon Cognito

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

리소스 서버를 통한 범위, M2M 및 API 권한 부여

사용자 풀에 도메인을 구성하면 Amazon Cognito는 OAuth 2.0 권한 부여 서버와 앱이 사용자에게 제공할 수 있는 가입 및 로그인 페이지가 포함된 호스팅된 웹 UI를 자동으로 프로비저닝합니다. 자세한 정보는 호스팅된 UI가 있는 앱 클라이언트 추가 섹션을 참조하세요. 권한 부여 서버가 액세스 토큰에 추가할 범위를 선택할 수 있습니다. 범위는 리소스 서버 및 사용자 데이터에 대한 액세스 권한을 부여합니다.

리소스 서버는 2.0 서버입니다. OAuth API 액세스가 보호되는 리소스를 보호하기 위해 사용자 풀의 액세스 토큰이 보호하는 대상 내에서 요청된 메서드와 경로를 승인하는 범위를 포함하는지 확인합니다. API 또한 토큰 서명, 토큰 만료 시간에 따른 유효성 및 토큰 클레임의 범위에 따라 액세스 수준을 기반으로 발급자를 확인합니다. 사용자 풀 범위는 액세스 토큰 클레임에 포함됩니다. scope Amazon Cognito 액세스 토큰의 클레임에 대한 자세한 내용은 액세스 토큰 사용 섹션을 참조하세요.

Amazon Cognito를 사용하면 액세스 토큰의 범위가 외부 APIs 또는 사용자 속성에 대한 액세스를 승인할 수 있습니다. 로컬 사용자, 페더레이션 사용자 또는 시스템 ID에 액세스 토큰을 발행할 수 있습니다.

API권한 부여

Amazon Cognito 토큰을 사용하여 요청을 승인할 수 있는 몇 가지 방법은 다음과 같습니다. APIs

액세스 토큰

Amazon Cognito 권한 부여자를 REST API 메서드 요청 구성에 추가할 때 권한 부여 범위에 권한 부여 범위를 추가하십시오. 이 구성을 사용하면 Authorization 헤더의 액세스 토큰을 API 수락하고 허용 범위를 검토하여 액세스 토큰을 검토합니다.

ID 토큰

유효한 ID 토큰을 사용자의 REST API Amazon Cognito 권한 부여자에게 전달하면 API Gateway는 요청을 수락하고 ID 토큰 콘텐츠를 백엔드로 전달합니다. API

Amazon Verified Permissions

검증된 권한에는 API-link 정책 저장소를 생성할 수 있는 옵션이 있습니다. 검증 권한은 요청 헤더의 ID 또는 액세스 토큰을 처리하는 Lambda 권한 부여자를 생성하고 할당합니다. Authorization 이 Lambda 권한 부여자는 토큰을 정책 스토어로 전달합니다. 그러면 Verified Permissions가 토큰을 정책과 비교하여 허용 또는 거부 결정을 승인자에게 반환합니다.

M achine-to-machine (M2M) 인증

Amazon Cognito는 시스템 ID로 API 데이터에 액세스하는 애플리케이션을 지원합니다. 사용자 풀의 시스템 ID는 애플리케이션 서버에서 실행되고 원격에 연결되는 기밀 클라이언트입니다. APIs 예약된 작업, 데이터 스트림 또는 자산 업데이트 등 사용자 개입 없이 운영이 이루어집니다. 이러한 클라이언트가 액세스 토큰으로 요청을 승인하면 M2M (Machine to Machine) 권한 부여를 수행합니다. M2M 인증에서는 공유 암호가 액세스 제어의 사용자 자격 증명을 대체합니다.

M2M 인증을 통해 액세스하는 애플리케이션에는 API 클라이언트 ID와 클라이언트 비밀번호가 있어야 합니다. 사용자 풀에서 클라이언트 자격 증명 부여를 지원하는 앱 클라이언트를 빌드해야 합니다. 클라이언트 자격 증명을 지원하려면 앱 클라이언트에 클라이언트 암호가 있어야 하고 사용자 풀 도메인이 있어야 합니다. 이 흐름에서는 컴퓨터 ID가 에서 직접 액세스 토큰을 Token 엔드포인트 요청합니다. 클라이언트 자격 증명 부여를 위한 액세스 토큰에서 리소스 서버의 사용자 지정 범위만 승인할 수 있습니다. 앱 클라이언트 설정에 대한 자세한 내용은 을 참조하십시오. 사용자 풀 앱 클라이언트

클라이언트 자격 증명 부여의 액세스 토큰은 컴퓨터 ID가 요청할 수 있도록 허용하려는 작업에 대한 검증 가능한 설명입니다. API 액세스 토큰이 API 요청을 승인하는 방법에 대해 자세히 알아보려면 계속 읽어보세요. 예제 애플리케이션을 보려면 Amazon Cognito 및 API Gateway 기반 머신 간 인증을 사용하는 섹션을 참조하십시오. AWS CDK

M2M 인증에는 월별 활성 사용자 () MAUs 에게 청구되는 방식과 다른 청구 모델이 있습니다. 사용자 인증에는 활성 사용자당 비용이 부과되는 반면, M2M 청구에는 활성 클라이언트 자격 증명, 앱 클라이언트 및 총 토큰 요청 양이 반영됩니다. 자세한 내용은 Amazon Cognito 요금을 참조하세요. M2M 인증 비용을 관리하려면 액세스 토큰 기간과 애플리케이션이 보내는 토큰 요청 수를 최적화하세요. API게이트웨이 캐싱을 사용하여 M2M 인증에서 새 토큰에 대한 요청을 줄이는 방법을 참조하십시오캐싱 토큰.

청구서에 비용을 추가하는 Amazon Cognito 작업을 최적화하는 방법에 대한 자세한 내용은 을 AWS 참조하십시오. 비용 관리

범위에 대한 정보

범위는 앱이 리소스에 요청할 수 있는 액세스의 수준입니다. Amazon Cognito 액세스 토큰에서 범위는 사용자 풀에 설정한 신뢰, 즉 알려진 디지털 서명이 있는 신뢰할 수 있는 액세스 토큰 발급자에 의해 뒷받침됩니다. 사용자 풀은 고객이 자신의 사용자 프로필 일부 또는 전체를 관리하거나 API 백엔드에서 데이터를 검색할 수 있음을 증명하는 범위를 가진 액세스 토큰을 생성할 수 있습니다. Amazon Cognito 사용자 풀은 사용자 풀의 예약 API 범위, 사용자 지정 범위 및 표준 범위와 함께 액세스 토큰을 발급합니다.

사용자 풀의 예약 범위 API

aws.cognito.signin.user.admin범위는 Amazon Cognito 사용자 풀을 승인합니다. API 액세스 토큰 보유자에게 사용자 풀 사용자에 대한 모든 정보 (예: 및 작업) 를 쿼리하고 업데이트할 수 있는 권한을 부여합니다. GetUserUpdateUserAttributesAPI Amazon Cognito 사용자 API 풀로 사용자를 인증할 때 액세스 토큰에서 받는 범위는 이 범위뿐입니다. 또한 앱 클라이언트에 읽기 및 쓰기 권한을 부여한 사용자 속성을 읽고 쓰는 데 필요한 유일한 범위이기도 합니다. 요청 시 이 범위를 권한 부여 엔드포인트에 요청할 수도 있습니다. 이 범위만으로는 UserInfo 엔드포인트에서 사용자 속성을 요청하기에 충분하지 않습니다. 사용자 API 풀과 사용자 userInfo 요청을 모두 승인하는 액세스 토큰의 경우 openid 범위와 aws.cognito.signin.user.admin 요청을 모두 요청해야 합니다. /oauth2/authorize

사용자 지정 범위

사용자 지정 범위는 리소스 서버가 APIs 보호하는 외부 요청에 권한을 부여합니다. 다른 유형의 범위를 사용하여 사용자 지정 범위를 요청할 수 있습니다. 이 페이지 전반에서 사용자 지정 범위에 대한 자세한 정보를 찾을 수 있습니다.

표준 범위

호스팅된 UI를 포함하여 사용자 풀 OAuth 2.0 권한 부여 서버로 사용자를 인증하는 경우 범위를 요청해야 합니다. Amazon Cognito 권한 부여 서버에서 사용자 풀 로컬 사용자와 서드 파티 페더레이션 사용자를 인증할 수 있습니다. 표준 OAuth 2.0 범위는 앱이 사용자 UserInfo 엔드포인트 풀의 사용자 정보를 읽을 수 있는 권한을 부여합니다. userInfo엔드포인트에서 사용자 속성을 쿼리하는 OAuth 모델은 사용자 속성에 대한 대량의 요청에 맞게 앱을 최적화할 수 있습니다. userInfo 엔드포인트는 액세스 토큰의 범위에 따라 결정되는 권한 수준의 속성을 반환합니다. 다음과 같은 표준 OAuth 2.0 범위의 액세스 토큰을 발행하도록 앱 클라이언트에 권한을 부여할 수 있습니다.

openid

OpenID Connect (OIDC) 쿼리의 최소 범위입니다. ID 토큰, 고유 식별자 클레임 sub 및 다른 범위를 요청하는 기능을 승인합니다.

참고

openid 범위를 요청하고 다른 범위를 요청하지 않은 경우 사용자 풀 ID 토큰과 userInfo 응답에는 앱 클라이언트가 읽을 수 있는 모든 사용자 속성에 대한 클레임이 포함됩니다. 요청 openid 및 기타 표준 범위 (예: profileemail,) 를 요청하는 경우 ID 토큰 및 userInfo응답의 내용은 추가 범위의 제약 조건으로 제한됩니다. phone

예를 들어, 파라미터와 권한 부여 엔드포인트를 함께 요청하면 sub, email, email_verified 등이 포함된 ID 토큰이 scope=openid+email에서 반환됩니다. 이 요청의 액세스 토큰은 UserInfo 엔드포인트와 동일한 속성을 반환합니다. 파라미터 scope=openid가 있는 요청은 ID 토큰 및 원본 userInfo에서 클라이언트가 읽을 수 있는 모든 속성을 반환합니다.

profile

앱 클라이언트가 읽을 수 있는 모든 사용자 속성을 승인합니다.

이메일

사용자 속성 emailemail_verified를 승인합니다. Amazon Cognito는 값이 명시적으로 설정된 경우 email_verified를 반환합니다.

phone

사용자 속성 phone_numberphone_number_verified를 승인합니다.

리소스 서버에 대한 정보

리소스 서버는 API 데이터베이스의 정보에 대한 액세스 권한을 부여하거나 IT 리소스를 제어할 수 있습니다. Amazon Cognito 액세스 토큰은 지원 2.0에 대한 액세스를 승인할 수 있습니다. APIs OAuth Amazon API REST APIs Gateway에는 Amazon Cognito 액세스 토큰을 통한 권한 부여를 위한 지원 기능이 내장되어 있습니다. 앱은 API 호출 시 액세스 토큰을 리소스 서버에 전달합니다. 리소스 서버는 액세스 토큰을 검사하여 액세스 권한을 부여할지 여부를 결정합니다.

Amazon Cognito는 향후 사용자 풀 액세스 토큰의 스키마를 업데이트할 수 있습니다. 앱이 액세스 토큰을 a에 전달하기 전에 콘텐츠를 분석하는 경우 스키마에 대한 업데이트를 수락하도록 코드를 엔지니어링해야 합니다. API

사용자 지정 범위는 사용자가 정의하며, 사용자 풀의 권한 부여 기능을 확대하여 사용자 및 해당 속성의 쿼리 및 수정과 관련이 없는 용도까지 포함합니다. 예를 들어 사진에 대한 리소스 서버를 가지고 있는 경우에는 두 개의 범위를 정의하게 되는데, photos.read는 사진에 대한 읽기 액세스를 위한 범위이고 photos.write는 쓰기/삭제 액세스를 위한 범위입니다. 권한 API 부여를 위해 액세스 토큰을 수락하고, scope 클레임에 포함된 토큰에 대한 액세스 HTTP GET 요청과 photos.read 토큰에 대한 HTTP POST 요청을 허용하도록 를 구성할 수 photos.write 있습니다. 이들은 사용자 지정 범위입니다.

참고

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

개요

Amazon Cognito를 사용하면 OAuth 2.0 리소스 서버를 생성하고 여기에 사용자 지정 범위를 연결할 수 있습니다. 액세스 토큰의 사용자 지정 범위는 액세스 토큰의 특정 작업을 승인합니다. API 사용자 풀의 모든 앱 클라이언트가 모든 리소스 서버에서 사용자 지정 범위를 발급하도록 권한을 부여할 수 있습니다. 사용자 지정 범위를 앱 클라이언트와 연결하고 OAuth 2.0 인증 코드 부여, 암시적 권한 부여 및 클라이언트 자격 증명 부여로 해당 범위를 에서 요청하십시오. Token 엔드포인트 Amazon Cognito는 액세스 토큰의 scope 클레임에 사용자 지정 범위를 추가합니다. 클라이언트는 리소스 서버에 대해 액세스 토큰을 사용할 수 있습니다. 리소스 서버는 토큰에 있는 범위를 기준으로 권한 부여를 결정합니다. 액세스 토큰 범위에 대한 자세한 내용은 사용자 풀을 통해 토큰 사용을 참조하세요.

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

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

참고

사용자 풀을 IdP로 사용하는 사용자 대화형 인증을 위해 설계되었기 때문에 AdminInitiateAuth요청은 단일 값을 가진 액세스 토큰에 대한 scope 클레임만 생성합니다. InitiateAuthaws.cognito.signin.user.admin

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

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

  • 리소스 서버 이름Solar system object tracker 또는 Photo API 같은 기억하기 쉬운 리소스 서버 이름입니다.

  • 리소스 서버 식별자: 리소스 서버의 고유 식별자입니다. 식별자는 예를 API 들어 연결하려는 모든 이름입니다. solar-system-data APIURI경로에 대한 보다 직접적인 참조와 https://solar-system-data-api.example.com 같이 더 긴 식별자를 구성할 수 있지만 문자열이 길면 액세스 토큰의 크기가 커집니다.

  • 범위 이름: scope 클레임에서 사용할 값입니다. 예: sunproximity.read.

  • 설명: 범위에 대한 알기 쉬운 설명입니다. 예: Check current proximity to sun.

Amazon Cognito는 로컬 사용자 풀의 사용자이든 서드 파티 ID 제공업체와의 페더레이션 사용자이든, 모든 사용자의 액세스 토큰에 사용자 지정 범위를 포함할 수 있습니다. 호스팅된 UI가 포함된 OAuth 2.0 인증 서버를 사용하여 인증 흐름 중에 사용자 액세스 토큰의 범위를 선택할 수 있습니다. 사용자 인증은 권한 부여 엔드포인트에서 scope를 요청 파라미터 중 하나로 사용하여 시작해야 합니다. 다음은 리소스 서버의 권장 형식입니다. 식별자에는 API 친숙한 이름을 사용하십시오. 그리고 사용자 지정 범위에는 해당 범위가 승인하는 작업을 사용합니다.

resourceServerIdentifier/scopeName

예를 들어 카이퍼 벨트에서 새로운 소행성을 발견했는데, 이를 카이퍼 벨트를 통해 등록하고 싶다고 가정해 보겠습니다. solar-system-data API 소행성 데이터베이스에 대한 쓰기 작업을 승인하는 범위는 asteroids.add입니다. 발견한 내용을 등록할 수 있는 권한을 부여하는 액세스 토큰을 요청할 때는 요청 매개변수의 형식을 다음과 같이 지정하십시오. scope HTTPS scope=solar-system-data/asteroids.add

리소스 서버에서 범위를 삭제해도 모든 클라이언트와의 연결이 삭제되지는 않습니다. 대신, 범위를 삭제하면 범위가 inactive로 표시됩니다. Amazon Cognito는 액세스 토큰에 비활성 범위를 추가하지 않지만 앱에서 요청할 경우 정상적으로 진행합니다. 나중에 리소스 서버에 범위를 다시 추가하면 Amazon Cognito가 해당 범위를 액세스 토큰에 다시 기록합니다. 앱 클라이언트와 연결하지 않은 범위를 요청하면 사용자 풀 리소스 서버에서 해당 범위를 삭제했는지 여부에 관계없이 인증이 실패합니다.

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

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

를 사용하여 사용자 풀의 AWS Management 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)

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

리소스 서버를 생성하려면
리소스 서버 설정에 대한 정보를 가져오려면
사용자 풀의 모든 리소스 서버에 대한 정보를 나열하려면
리소스 서버를 삭제하려면
리소스 서버의 설정을 업데이트하려면