리소스 서버를 통한 범위, M2M 및 API 인증 - Amazon Cognito

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

리소스 서버를 통한 범위, M2M 및 API 인증

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

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

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

M achine-to-machine (M2M) 인증

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

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

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

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

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

범위에 대한 정보

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

사용자 풀의 예약된 API 범위

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

사용자 지정 범위

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

표준 범위

호스팅 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 응답에는 앱 클라이언트가 읽을 수 있는 모든 사용자 속성에 대한 클레임이 포함됩니다. 요청할 때 openidprofile, email, phone 등 기타 표준 범위(예: ID 토큰 및 userInfo 응답)는 추가 범위의 제약 조건으로 제한됩니다.

예를 들어, 파라미터와 권한 부여 엔드포인트를 함께 요청하면 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 액세스 토큰은 OAuth 2.0을 지원하는 API에 대한 액세스 권한을 부여할 수 있습니다. Amazon API Gateway REST API에는 Amazon Cognito 액세스 토큰을 통한 권한 부여 지원 기능이 내장되어 있습니다. 앱은 API 호출 시 액세스 토큰을 리소스 서버로 전달합니다. 리소스 서버는 액세스 토큰을 검사하여 액세스 권한을 부여할지 여부를 결정합니다.

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

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

참고

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

개요

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

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

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

참고

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

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

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

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

  • 리소스 서버 식별자: 리소스 서버의 고유 식별자입니다. 식별자는 API와 연결할 이름(예: solar-system-data)입니다. 예를 들어 API URI 경로에 대한 보다 직접적인 참조로 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. 생성을 선택합니다.

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

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

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

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