OpenID Connect 공급자(자격 증명 풀) - Amazon Cognito

OpenID Connect 공급자(자격 증명 풀)

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

OpenID Connect 공급자 추가

OpenID Connect 공급자를 생성하는 방법에 대한 자세한 내용은 IAM 설명서를 참조하세요.

Amazon Cognito와 공급자 연결

IAM 콘솔에서 OpenID Connect 공급자를 생성한 후에는 자격 증명 풀에 이 공급자를 연결할 수 있습니다. 구성된 모든 공급자는 Amazon Cognito 콘솔의 자격 증명 풀 편집(Edit Identity Pool) 화면에서 OpenID Connect 공급자(OpenID Connect Providers) 헤더 아래에 표시됩니다.


        외부 공급자 강화 인증 흐름

여러 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 공급자에서 나열된 클라이언트 ID와 비교하여 확인합니다.

  5. azp 파라미터가 없으면 aud 파라미터를 OpenId Connect 공급자에서 나열된 클라이언트 ID와 비교하여 확인합니다.

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

OIDC ID 토큰을 Amazon Cognito에 제공하려면 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);