API 및 SDK 인증을 위한 권한 부여 모델 - Amazon Cognito

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

API 및 SDK 인증을 위한 권한 부여 모델

사용자 풀 인증을 시작할 때 애플리케이션 권한 부여 모델을 결정해야 합니다. Amazon Cognito 인증을 사용하려면 일반적으로 두 개의 API 작업을 순서대로 구현해야 합니다. 인증에 사용하는 API 작업은 애플리케이션의 특성에 따라 다릅니다. 애플리케이션이 사용자에게 배포되는 퍼블릭 클라이언트는 퍼블릭 인증을 사용합니다. 여기서 로그인 요청은 승인이 필요하지 않습니다. 애플리케이션 로직이 원격 시스템에서 호스팅되는 서버 측 클라이언트는 로그인 요청에 대한 IAM 권한 부여를 통해 인증 작업을 보호할 수 있습니다. 다음 API 작업 페어와 해당 SDK 메서드는 사용 가능한 각 권한 부여 모델에 매핑됩니다.

API 인증을 비교하고 API 작업 및 해당 권한 부여 모델의 전체 목록을 보려면 섹션을 참조하세요API, OIDC 및 관리형 로그인 페이지 인증 이해.

Client-side (public) authentication

InitiateAuthRespondToAuthChallenge는 클라이언트측 퍼블릭 앱 클라이언트와 함께 사용하기 위한 인증되지 않은 API입니다. 자세한 내용은 클라이언트 측 인증 옵션API, OIDC 및 관리형 로그인 페이지 인증 이해 단원을 참조하세요.

Server-side authentication

AdminInitiateAuthAdminRespondToAuthChallenge는 IAM 보안 인증 정보를 필요로 하며 서버측 기밀 앱 클라이언트에 적합합니다. 자세한 내용은 서버 측 인증 옵션API, OIDC 및 관리형 로그인 페이지 인증 이해 단원을 참조하세요.

인증이 실패하거나 Amazon Cognito가 사용자에게 토큰이 발행할 때까지 사용자는 연속 문제에 대답하여 인증합니다. 모든 사용자 지정 인증 흐름을 지원하기 위해 서로 다른 문제가 포함된 프로세스에서 Amazon Cognito를 통해 이러한 단계를 반복할 수 있습니다.

서버 측 인증 옵션

웹 애플리케이션 및 기타 서버 측 애플리케이션은 원격 서버의 세션, 일반적으로 해당 서버에 대한 세션을 시작하는 브라우저에서 인증을 구현합니다. 서버 측 애플리케이션은 일반적으로 다음과 같은 특성을 갖습니다.

사용자 풀 API를 사용하는 서버 측 작업은 암호, 일회용 암호 또는 패스키를 기본 로그인 요소로 사용할 수 있습니다. 서버 측 앱의 경우 사용자 풀 인증은 클라이언트 측 앱에 대한 인증과 유사합니다. 단, 다음은 예외입니다.

  • 서버 측 앱이 AdminInitiateAuth API 요청을 합니다. 이 작업에는 cognito-idp:AdminInitiateAuth 및를 포함하는 권한이 있는 AWS 자격 증명이 필요합니다cognito-idp:AdminRespondToAuthChallenge. 작업은 필요한 챌린지 또는 인증 결과를 반환합니다.

  • 애플리케이션이 챌린지를 수신하면 AdminRespondToAuthChallenge API 요청을 수행합니다. AdminRespondToAuthChallenge API 작업에는 자격 증명도 필요합니다 AWS .

AWS 자격 증명을 사용하여 Amazon Cognito API 요청에 서명하는 방법에 대한 자세한 내용은 AWS 일반 참조서명 버전 4 서명 프로세스를 참조하세요.

AdminInitiateAuth 응답 ChallengeParametersUSER_ID_FOR_SRP 속성이 있으면 별칭(이메일 주소 또는 전화번호)이 아닌 사용자의 실제 사용자 이름이 이 속성에 포함됩니다. AdminRespondToAuthChallenge를 호출할 때 ChallengeResponses에서 USERNAME 파라미터에 이 사용자 이름을 전달해야 합니다.

참고

백엔드 관리자 구현은 관리자 인증 흐름을 사용하므로이 흐름은 기억된 디바이스를 지원하지 않습니다. 디바이스 추적이 설정되면 관리 인증이 성공하지만 액세스 토큰을 새로 고치는 호출은 실패합니다.

클라이언트 측 인증 옵션

사용자의 디바이스에 설치된 모바일 앱 및 기타 클라이언트 측 애플리케이션 유형은 일반적으로 다음과 같은 특성을 갖습니다.

  • React 네이티브, Flutter, Swift와 같은 언어로 빌드되어 사용자 디바이스에 배포됩니다.

  • 퍼블릭 클라이언트라는 클라이언트 보안 암호가 없는 사용자 풀 앱 클라이언트에 연결합니다.

  • IAM 인증 API 요청을 승인하는 AWS 자격 증명에 액세스할 수 없습니다.

  • 인증을 위해 관리형 로그인을 호출하거나 AWS SDK를 사용하여 사용자 풀 API에서 퍼블릭 및 토큰 인증 작업을 사용합니다.

  • 퍼블릭 고객에게 서비스를 제공하고 누구나 가입하고 로그인할 수 있도록 허용합니다.

사용자 풀 API를 사용하는 클라이언트 측 작업은 암호, 일회용 암호 또는 패스키를 기본 로그인 인자로 사용할 수 있습니다. 다음 프로세스는 AWS Amplify 또는 AWS SDK로 생성한 사용자 클라이언트 측 앱을 대상으로 수행됩니다.

  1. 사용자가 사용자 이름 및 암호를 앱에 입력합니다.

  2. 앱이 사용자의 사용자 이름 및 Secure Remote Password(SRP) 세부 정보를 사용하여 InitiateAuth 작업을 호출합니다.

    이 API 작업은 인증 파라미터를 반환합니다.

    참고

    이 앱은 AWS SDK에 기본 제공된 Amazon Cognito SRP 기능을 사용하여 SRP 세부 정보를 생성합니다.

  3. 앱이 RespondToAuthChallenge 작업을 호출합니다. 호출에 성공하면 Amazon Cognito에서 사용자 토큰을 반환하고 인증 흐름이 완료됩니다.

    Amazon Cognito에 다른 문제가 필요한 경우 RespondToAuthChallenge에 대한 호출이 토큰을 반환하지 않습니다. 대신 이러한 호출은 세션을 반환합니다.

  4. RespondToAuthChallenge가 세션을 반환하는 경우 이번에는 앱이 세션 및 챌린지 응답(예: MFA 코드)과 함께 RespondToAuthChallenge를 다시 호출합니다.

API, OIDC 및 관리형 로그인 페이지 인증 이해

Amazon Cognito 사용자 풀은 여러 인증 기술의 조합입니다. 외부 ID 제공업체(IdPs. OpenID Connect(OIDC) SDK로 인증을 구현하는 애플리케이션의 IdPs입니다. SDKs 이는 OIDC 인증과 비슷하지만 AWS SDKs의 일부인 API 메서드에서 JSON 웹 토큰(JWTs)의 발급자로 인증을 제공합니다. 또한 애플리케이션에 대한 보안 진입점일 수도 있습니다.

사용자 풀에 가입하고, 로그인하고, 사용자 풀에서 사용자를 관리할 때는 두 가지 옵션을 사용할 수 있습니다.

  1. 관리형 로그인 페이지와 클래식 호스팅 UI에는 관리형 로그인 사용자 대화형 엔드포인트와 IdP 및 신뢰 당사자 역할을 처리하는 페더레이션 엔드포인트가 포함됩니다. 이 엔드포인트는 사용자 풀에 사용할 도메인을 선택할 때 Amazon Cognito가 활성화하는 퍼블릭 웹 페이지 패키지를 구성합니다. 가입, 로그인, 암호 관리 및 다중 인증(MFA) 페이지를 포함하여 Amazon Cognito 사용자 풀의 인증 및 권한 부여 기능을 빠르게 시작하려면 관리형 로그인의 기본 제공 사용자 인터페이스를 사용합니다.

    다른 사용자 풀 엔드포인트는 서드 파티 ID 제공업체(idP)를 사용한 인증을 용이하게 합니다. 이들이 수행하는 서비스에는 다음이 포함됩니다.

    1. saml2/idpresponse 및 oauth2/idpresponse 등 IdP의 인증된 클레임을 위한 서비스 공급자 콜백 엔드포인트. Amazon Cognito가 앱과 IdP 사이의 중간 서비스 공급자(SP)인 경우 콜백 엔드포인트는 서비스를 나타냅니다.

    2. oauth2/userInfo 및 /.well-known/jwks.json 등 환경에 대한 정보를 제공하는 엔드포인트. 앱은 토큰을 확인하거나 OIDC 또는 OAuth 2.0 개발자 라이브러리를 사용하여 사용자 프로필 데이터를 검색할 때 이러한 엔드포인트를 사용합니다.

  2. Amazon Cognito 사용자 풀 API는 웹 또는 모바일 앱이 사용자 지정 프런트 엔드에서 로그인 정보를 수집한 후 사용자를 인증할 수 있는 도구 세트입니다. 사용자 풀 API 인증은 다음 JSON 웹 토큰을 생성합니다.

    1. 사용자의 검증 가능한 속성 클레임이 포함된 자격 증명 토큰.

    2. AWS  서비스 엔드포인트에 대한 토큰 인증된 API 요청을 생성할 권한을 사용자에게 부여하는 액세스 토큰.

      참고

      기본적으로 사용자 풀 API 인증의 액세스 토큰에는 aws.cognito.signin.user.admin 범위만 포함되어 있습니다. 추가 범위가 포함된 액세스 토큰을 생성하려면(예: 서드 파티 API에 대한 요청 승인을 위해) 사용자 풀 엔드포인트를 통한 인증 중에 범위를 요청하거나 사전 토큰 생성 Lambda 트리거에서 사용자 지정 범위를 추가합니다. 액세스 토큰 사용자 지정은 AWS 청구서에 비용을 추가합니다.

    3. 새 ID 및 액세스 토큰에 대한 요청을 승인하고 사용자 ID 및 액세스 제어 속성을 새로 고치는 새로 고침 토큰입니다.

일반적으로 사용자 풀 엔드포인트를 통해 로그인하는 페더레이션 사용자를 프로필이 사용자 풀에 로컬인 사용자와 연결할 수 있습니다. 로컬 사용자는 외부 IdP를 통한 페더레이션 없이 사용자 풀 디렉터리에만 존재합니다. AdminLinkProviderForUser API 요청에서 로컬 사용자에 페더레이션 자격 증명을 연결하면 해당 사용자가 사용자 풀 API로 로그인할 수 있습니다. 자세한 내용은 페더레이션 사용자를 기존 사용자 프로필에 연결 단원을 참조하십시오.

Amazon Cognito 사용자 풀 API는 두 가지 용도로 사용합니다.

  1. 이 API는 Amazon Cognito 사용자 풀 리소스를 생성하고 구성합니다. 예를 들어 사용자 풀을 생성하고, AWS Lambda 트리거를 추가하고, 관리형 로그인 페이지를 호스팅하는 사용자 풀 도메인을 구성할 수 있습니다.

  2. 로컬 및 연결된 사용자에 대해 가입, 로그인 및 기타 사용자 작업을 수행합니다.

Amazon Cognito 사용자 풀 API를 사용한 예제 시나리오
  1. 앱에서 생성한 “Create an account(계정 만들기)” 버튼을 사용자가 선택합니다. 사용자가 이메일 주소와 암호를 입력합니다.

  2. 앱에서 SignUp API 요청을 보내고 사용자 풀에 새 사용자를 생성합니다.

  3. 앱에서 사용자에게 이메일 확인 코드를 입력하라는 메시지를 표시합니다. 사용자가 이메일 메시지로 받은 코드를 입력합니다.

  4. 앱은 ConfirmSignUp API 요청과 사용자의 확인 코드를 전송합니다.

  5. 앱이 사용자 이름과 암호를 입력하라는 메시지를 표시하고, 사용자가 자신의 정보를 입력합니다.

  6. 앱은 InitiateAuth API 요청을 보내고 ID 토큰, 액세스 토큰 및 새로 고침 토큰을 저장합니다. 앱은 OIDC 라이브러리를 호출하여 사용자의 토큰을 관리하고 해당 사용자의 영구 세션을 유지합니다.

Amazon Cognito 사용자 풀 API에서는 IdP를 통해 페더레이션하는 사용자를 로그인할 수 없습니다. 사용자 풀 엔드포인트를 통해 이러한 사용자를 인증해야 합니다. 관리형 로그인을 포함하는 사용자 풀 엔드포인트에 대한 자세한 내용은 섹션을 참조하세요사용자 풀 엔드포인트 및 관리형 로그인 참조.

페더레이션 사용자는 관리형 로그인에서 시작하여 IdP를 선택하거나 관리형 로그인을 건너뛰고 사용자를 IdP로 직접 전송하여 로그인할 수 있습니다. 권한 부여 엔드포인트에 대한 API 요청에 IdP 파라미터가 포함되면, Amazon Cognito는 사용자를 자동으로 IdP 로그인 페이지로 리디렉션합니다.

관리형 로그인 페이지가 있는 예제 시나리오
  1. 앱에서 생성한 “Create an account(계정 만들기)” 버튼을 사용자가 선택합니다.

  2. 관리형 로그인은 사용자가 개발자 자격 증명을 등록한 소셜 자격 증명 공급자 목록을 사용자에게 제공합니다. 사용자가 Apple을 선택합니다.

  3. 앱에서 공급자 이름 SignInWithApple권한 부여 엔드포인트에 대한 요청을 시작합니다.

  4. 사용자의 브라우저에서 Apple 인증 페이지가 열립니다. 사용자가 로그인하여 Amazon Cognito가 프로필 정보를 읽을 수 있도록 권한을 부여하기로 선택합니다.

  5. Amazon Cognito가 Apple 액세스 토큰을 확인하고 사용자의 Apple 프로필을 쿼리합니다.

  6. 사용자가 앱에 Amazon Cognito 인증 코드를 제시합니다.

  7. 애플리케이션의 OIDC 라이브러리는 권한 부여 코드를와 교환Token 엔드포인트하고 사용자 풀에서 발급한 ID 토큰, 액세스 토큰 및 새로 고침 토큰을 저장합니다. 앱은 OIDC 라이브러리를 사용하여 사용자의 토큰을 관리하고 해당 사용자의 영구 세션을 유지합니다.

사용자 풀 API 및 관리형 로그인 페이지는이 가이드에서 설명하는 다양한 시나리오를 지원합니다. 다음 섹션에서는 사용자 풀 API를 가입, 로그인, 리소스 관리 요구 사항을 지원하는 클래스로 구분하는 방법을 살펴봅니다.

Amazon Cognito 사용자 풀 인증 및 미인증 API 작업

리소스 관리 인터페이스이자 사용자 대면 인증 및 권한 부여 인터페이스인 Amazon Cognito 사용자 풀 API는 운영에 동반되는 권한 부여 모델을 결합합니다. API 작업에 따라 IAM 자격 증명, 액세스 토큰, 세션 토큰, 클라이언트 암호 또는 이들의 조합을 통해 인증을 제공해야 할 수 있습니다. 대부분의 사용자 인증 및 권한 부여 작업의 경우, 요청의 인증 버전과 미인증 버전을 선택할 수 있습니다. 모바일 앱처럼 사용자에게 배포하는 앱의 경우 미인증 작업이 모범 사례입니다. 코드에 보안 암호를 포함하지 않아도 됩니다.

IAM 인증 관리 작업IAM 인증 사용자 작업에 대한 IAM 정책에서만 권한을 할당할 수 있습니다.

IAM 인증 관리 작업은 AWS Management Console에서처럼 사용자 풀 및 앱 클라이언트 구성을 수정하고 확인합니다.

예를 들어 UpdateUserPool API 요청에서 사용자 풀을 수정하려면 자격 AWS 증명과 IAM 권한을 제시하여 리소스를 업데이트해야 합니다.

AWS Command Line Interface (AWS CLI) 또는 AWS SDK에서 이러한 요청을 승인하려면 요청에 IAM 자격 증명을 추가하는 환경 변수 또는 클라이언트 구성으로 환경을 구성합니다. 자세한 내용은에서 AWS 자격 증명을 AWS 사용하여 액세스를 참조하세요AWS 일반 참조. Amazon Cognito 사용자 풀 API의 서비스 엔드포인트로 바로 요청을 보낼 수도 있습니다. 요청의 헤더에 포함된 AWS 자격 증명으로 이러한 요청을 승인하거나 서명해야 합니다. 자세한 내용은 AWS API 요청 서명을 참조하세요.

IAM 인증 관리 작업
AddCustomAttributes
CreateGroup
CreateIdentityProvider
CreateResourceServer
CreateUserImportJob
CreateUserPool
CreateUserPoolClient
CreateUserPoolDomain
DeleteGroup
DeleteIdentityProvider
DeleteResourceServer
DeleteUserPool
DeleteUserPoolClient
DeleteUserPoolDomain
DescribeIdentityProvider
DescribeResourceServer
DescribeRiskConfiguration
DescribeUserImportJob
DescribeUserPool
DescribeUserPoolClient
DescribeUserPoolDomain
GetCSVHeader
GetGroup
GetIdentityProviderByIdentifier
GetSigningCertificate
GetUICustomization
GetUserPoolMfaConfig
ListGroups
ListIdentityProviders
ListResourceServers
ListTagsForResource
ListUserImportJobs
ListUserPoolClients
ListUserPools
ListUsers
ListUsersInGroup
SetRiskConfiguration
SetUICustomization
SetUserPoolMfaConfig
StartUserImportJob
StopUserImportJob
TagResource
UntagResource
UpdateGroup
UpdateIdentityProvider
UpdateResourceServer
UpdateUserPool
UpdateUserPoolClient
UpdateUserPoolDomain

IAM 인증 사용자 작업은 사용자의 가입, 로그인, 보안 인증 정보 관리, 수정 및 보기를 수행합니다.

예를 들어 웹 프런트 엔드를 지원하는 서버 측 애플리케이션 계층을 보유할 수 있습니다. 서버 측 앱은 Amazon Cognito 리소스에 대한 액세스 권한이 있는 신뢰하는 OAuth 기밀 클라이언트입니다. 앱에 사용자를 등록하려면 서버가 AdminCreateUser API 요청에 AWS 자격 증명을 포함할 수 있습니다. OAuth 클라이언트 유형에 대한 자세한 내용은 OAuth 2.0 인증 프레임워크클라이언트 유형을 참조하세요.

AWS CLI 또는 AWS SDK에서 이러한 요청을 승인하려면 요청에 IAM 자격 증명을 추가하는 환경 변수 또는 클라이언트 구성으로 서버 측 앱 환경을 구성합니다. 자세한 내용은에서 AWS 자격 증명을 AWS 사용하여 액세스를 참조하세요AWS 일반 참조. Amazon Cognito 사용자 풀 API의 서비스 엔드포인트로 바로 요청을 보낼 수도 있습니다. 요청의 헤더에 포함된 AWS 자격 증명으로 이러한 요청을 승인하거나 서명해야 합니다. 자세한 내용은 AWS API 요청 서명을 참조하세요.

앱 클라이언트에 클라이언트 보안 암호가 있는 경우 AuthParameters에 IAM 자격 증명과, 작업에 따라 SecretHash 파라미터 또는 SECRET_HASH 값을 입력해야 합니다. 자세한 내용은 보안 암호 해시 값 컴퓨팅 단원을 참조하십시오.

IAM 인증 사용자 작업
AdminAddUserToGroup
AdminConfirmSignUp
AdminCreateUser
AdminDeleteUser
AdminDeleteUserAttributes
AdminDisableProviderForUser
AdminDisableUser
AdminEnableUser
AdminForgetDevice
AdminGetDevice
AdminGetUser
AdminInitiateAuth
AdminLinkProviderForUser
AdminListDevices
AdminListGroupsForUser
AdminListUserAuthEvents
AdminRemoveUserFromGroup
AdminResetUserPassword
AdminRespondToAuthChallenge
AdminSetUserMFAPreference
AdminSetUserPassword
AdminSetUserSettings
AdminUpdateAuthEventFeedback
AdminUpdateDeviceStatus
AdminUpdateUserAttributes
AdminUserGlobalSignOut

미인증 사용자 작업은 사용자의 가입, 로그인 및 암호 재설정 시작 작업을 수행합니다. 인터넷에 있는 모든 사용자가 앱에 가입하고 로그인할 수 있게 하려면 미인증, 즉 공개 API 작업을 사용해야 합니다.

예를 들어 앱에 사용자를 등록하려면 보안 암호에 대한 어떠한 권한 액세스도 제공하지 않는 OAuth 공개 클라이언트를 배포하면 됩니다. 미인증 API 작업 SignUp을 이용해 이 사용자를 등록할 수 있습니다.

AWS SDK를 사용하여 개발한 퍼블릭 클라이언트에서 이러한 요청을 보내려면 자격 증명을 구성할 필요가 없습니다. 추가 인증 없이 Amazon Cognito 사용자 풀 API의 서비스 엔드포인트로 바로 요청을 보낼 수도 있습니다.

앱 클라이언트에 클라이언트 보안 암호가 있는 경우 작업에 따라 AuthParametersSecretHash 파라미터 또는 SECRET_HASH 값을 입력해야 합니다. 자세한 내용은 보안 암호 해시 값 컴퓨팅 단원을 참조하십시오.

미인증 사용자 작업
SignUp
ConfirmSignUp
ResendConfirmationCode
ForgotPassword
ConfirmForgotPassword
InitiateAuth

토큰으로 권한이 부여된 사용자 작업은 사용자가 로그인하거나 로그인 프로세스를 시작한 후 사용지 로그아웃, 보안 인증 정보 관리, 수정 및 확인 작업을 수행합니다. 앱에서 보안 암호를 배포하지 않고 사용자 자신의 자격 증명으로 요청을 승인하고 싶다면, 토큰으로 권한이 부여된 API 작업을 사용해야 합니다. 사용자가 로그인을 완료한 경우 액세스 토큰을 사용하여 토큰으로 권한이 부여된 API 요청을 승인해야 합니다. 사용자가 로그인 프로세스를 진행 중이라면, Amazon Cognito가 이전 요청에 대한 응답으로 반환한 세션 토큰을 사용하여 토큰으로 권한이 부여된 API 요청을 승인해야 합니다.

예를 들어 공개 클라이언트에서는 사용자 자신의 프로필에 대한 쓰기 권한만 제한하는 방식으로 사용자 프로필을 업데이트해야 할 수 있습니다. 이 업데이트를 수행하기 위해 클라이언트는 UpdateUserAttributes API 요청에 사용자의 액세스 토큰을 포함할 수 있습니다.

AWS SDK를 사용하여 개발한 퍼블릭 클라이언트에서 이러한 요청을 보내려면 자격 증명을 구성할 필요가 없습니다. 요청에 AccessToken 또는 Session 파라미터를 포함합니다. Amazon Cognito 사용자 풀 API의 서비스 엔드포인트로 바로 요청을 보낼 수도 있습니다. 서비스 엔드포인트에 대한 요청을 승인하려면 요청의 POST 본문에 액세스 또는 세션 토큰을 포함합니다.

토큰으로 권한이 부여된 작업을 위한 API 요청에 서명하려면 액세스 토큰을 Bearer <Base64-encoded access token> 형식의 Authorization 헤더로 요청에 포함하세요.

토큰 권한 부여 사용자 작업 AccessToken 세션
RespondToAuthChallenge
ChangePassword
GetUser
UpdateUserAttributes
DeleteUserAttributes
DeleteUser
ConfirmDevice
ForgetDevice
GetDevice
ListDevices
UpdateDeviceStatus
GetUserAttributeVerificationCode
VerifyUserAttribute
SetUserSettings
SetUserMFAPreference
GlobalSignOut
AssociateSoftwareToken
UpdateAuthEventFeedback
VerifySoftwareToken
RevokeToken¹

¹ RevokeToken은 새로 고침 토큰을 파라미터로 사용합니다. 새로 고침 토큰은 인증 토큰 및 대상 리소스 역할을 합니다.