OIDC 공급자를 자격 증명 풀 IdP로 설정 - Amazon Cognito

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

OIDC 공급자를 자격 증명 풀 IdP로 설정

OpenID Connect는 여러 로그인 공급자가 지원하는 인증에 대한 개방형 표준입니다. Amazon Cognito 를 사용하면 ID를 를 통해 구성하는 OpenID Connect 공급자와 연결할 수 있습니다AWS Identity and Access Management.

OpenID Connect 공급자 추가

OpenID Connect 공급자를 생성하는 방법에 대한 자세한 내용은 AWS Identity and Access Management 사용 설명서 OpenID Connect(OIDC) 자격 증명 공급자 생성을 참조하세요.

Amazon Cognito와 공급자 연결

OIDC 자격 증명 공급자를 추가하려면(IdP )
  1. Amazon Cognito 콘솔에서 자격 증명 풀을 선택합니다. 자격 증명 풀을 선택합니다.

  2. 사용자 액세스 탭을 선택합니다.

  3. ID 제공업체 추가를 선택합니다.

  4. OpenID Connect(OIDC)를 선택합니다.

  5. 의 에서 OIDC 자격 증명 공급자IAM IdPs 를 선택합니다 AWS 계정. 새 SAML 공급자를 추가하려면 새 공급자 생성을 선택하여 IAM 콘솔로 이동합니다.

  6. Amazon Cognito가 이 공급자를 통해 인증된 사용자에게 보안 인증을 발급할 때 요청하는 역할을 설정하려면 역할 설정을 구성하세요.

    1. 인증된 역할을 구성할 때 설정한 기본 역할을 이 IdP의 사용자에게 할당하거나 규칙을 사용하여 역할 선택을 선택할 수 있습니다.

      1. 규칙을 사용하여 역할 선택을 선택한 경우 사용자 인증의 소스 클레임, 클레임 비교 기준으로 사용할 운영자, 이 역할 선택과 일치하도록 하는 , 역할 할당이 일치할 때 할당할 역할을 입력합니다. 다른 조건에 따라 추가 규칙을 생성하려면 다른 항목 추가를 선택합니다.

      2. 역할 해결을 선택합니다. 사용자의 클레임이 규칙과 일치하지 않는 경우 보안 인증을 거부하거나 인증된 역할의 보안 인증을 발급할 수 있습니다.

  7. Amazon Cognito가 이 공급자를 통해 인증한 사용자에게 보안 인증을 발급할 때 할당하는 보안 주체 태그를 변경하려면 액세스 제어를 위한 속성을 구성합니다.

    1. 보안 주체 태그를 적용하지 않으려면 비활성을 선택합니다.

    2. sub 및 aud 클레임 기반 보안 주체 태그를 적용하려면 기본 매핑 사용을 선택합니다.

    3. 보안 주체 태그에 대한 속성의 자체 사용자 지정 스키마를 생성하려면 사용자 지정 매핑 사용을 선택합니다. 그런 다음 태그에 표시하려는 각 클레임에서 소싱하려는 태그 키를 입력합니다.

  8. 변경 사항 저장(Save changes)을 선택합니다.

여러 OpenID Connect 공급자를 단일 자격 증명 풀에 연결할 수 있습니다.

OpenID Connect 사용

로그인하고 ID 토큰을 받는 방법은 공급자 설명서를 참조하세요.

토큰을 받은 후에는 토큰을 로그인 맵에 추가합니다. 공급자URI의 를 키로 사용합니다.

OpenID Connect 토큰 검증

Amazon Cognito와 처음 통합할 때 InvalidToken 예외가 발생할 수 있습니다. Amazon Cognito가 OpenID Connect(OIDC) 토큰을 검증하는 방법을 이해하는 것이 중요합니다.

참고

여기에 지정된 대로(https://tools.ietf.org/html/rfc7523) Amazon Cognito는 시스템 간의 모든 시계 왜곡을 처리할 수 있는 5분의 유예 기간을 제공합니다.

  1. iss 파라미터가 로그인 맵에 사용된 키(예: login.provider.com)와 일치해야 합니다.

  2. 서명이 유효해야 합니다. 서명은 RSA 퍼블릭 키를 통해 확인할 수 있어야 합니다.

  3. 인증서 퍼블릭 키의 지문은 OIDC 공급자를 생성할 IAM 때 설정한 지문과 일치합니다.

  4. azp 파라미터가 있는 경우 OIDC 공급자에 나열된 클라이언트IDs와 비교하여 이 값을 확인합니다.

  5. azp 파라미터가 없는 경우 aud 파라미터를 OIDC 공급자의 나열된 클라이언트IDs와 비교 확인합니다.

jwt.io 웹 사이트는 토큰을 디코딩하고 이러한 값을 확인하는 데 사용할 수 있는 중요한 리소스입니다.

Android

Map<String, String> logins = new HashMap<String, String>(); logins.put("login.provider.com", token); credentialsProvider.setLogins(logins);

iOS - Objective-C

credentialsProvider.logins = @{ "login.provider.com": token }

iOS - Swift

Amazon Cognito에 OIDC ID 토큰을 제공하려면 AWSIdentityProviderManager 프로토콜을 구현합니다.

logins 메서드를 구현할 때 구성한 OIDC 공급자 이름이 포함된 사전을 반환합니다. 다음 코드 예와 같이 이 사전은 키 역할을 하고 인증된 사용자에게서 받은 현재 ID 토큰은 값 역할을 합니다.

class OIDCProvider: NSObject, AWSIdentityProviderManager { func logins() -> AWSTask<NSDictionary> { let completion = AWSTaskCompletionSource<NSString>() getToken(tokenCompletion: completion) return completion.task.continueOnSuccessWith { (task) -> AWSTask<NSDictionary>? in //login.provider.name is the name of the OIDC provider as setup in the Amazon Cognito console return AWSTask(result:["login.provider.name":task.result!]) } as! AWSTask<NSDictionary> } func getToken(tokenCompletion: AWSTaskCompletionSource<NSString>) -> Void { //get a valid oidc token from your server, or if you have one that hasn't expired cached, return it //TODO code to get token from your server //... //if error getting token, set error appropriately tokenCompletion.set(error:NSError(domain: "OIDC Login", code: -1 , userInfo: ["Unable to get OIDC token" : "Details about your error"])) //else tokenCompletion.set(result:"result from server id token") } }

를 인스턴스화할 때 가 구현하는 클래스를 AWSCognitoCredentialsProvider전달합니다.AWSIdentityProviderManager 생성기에서 의 값으로 identityProviderManager 사용됩니다. 자세한 내용은 를 참조하세요. AWSCognitoCredentialsProvider 참조 페이지에서 initWithRegionType:identityPoolId:identityProviderManager를 선택합니다.

JavaScript

AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { 'login.provider.com': token } });

Unity

credentials.AddLogin("login.provider.com", token);

Xamarin

credentials.AddLogin("login.provider.com", token);