페이스북을 아이덴티티 풀 IdP로 설정하기 - Amazon Cognito

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

페이스북을 아이덴티티 풀 IdP로 설정하기

Amazon Cognito 자격 증명 풀은 Facebook과 통합되어 모바일 애플리케이션 사용자를 위해 페더레이션된 인증을 제공합니다. 이 섹션에서는 Facebook을 IdP로 사용하여 애플리케이션을 등록하고 설정하는 방법을 설명합니다.

Facebook 설정

Facebook 사용자 인증 및 Facebook API와의 상호 작용 이전에 Facebook을 통해 애플리케이션을 등록합니다.

Facebook 개발자 포털을 통해 애플리케이이션을 설정할 수 있습니다. Amazon Cognito 자격 증명 풀에 Facebook을 통합하기 전에 이 절차를 수행합니다.

Facebook 설정
  1. Facebook 개발자 포털에서 Facebook 자격 증명으로 로그인합니다.

  2. 메뉴에서 새 앱 추가를 선택합니다.

  3. 플랫폼을 선택하고 빠른 시작 프로세스를 완료합니다.

Android

Android 앱을 Facebook 로그인과 통합하는 방법에 대한 자세한 내용은 Facebook Getting Started Guide(Facebook 시작 안내서)를 참조하세요.

iOS - Objective-C

iOS Objective-C 앱을 Facebook 로그인과 통합하는 방법에 대한 자세한 내용은 Facebook Getting Started Guide(Facebook 시작 안내서)를 참조하세요.

iOS - Swift

iOS Swift 앱을 Facebook 로그인과 통합하는 방법에 대한 자세한 내용은 Facebook Getting Started Guide(Facebook 시작 안내서)를 참조하세요.

JavaScript

JavaScript 웹 앱을 Facebook 로그인과 통합하는 방법에 대한 자세한 내용은 Facebook 시작 안내서를 참조하십시오.

Unity

Unity 앱을 Facebook 로그인과 통합하는 방법에 대한 자세한 내용은 Facebook Getting Started Guide(Facebook 시작 안내서)를 참조하세요.

Xamarin

Facebook 인증을 추가하려면 먼저 아래의 적절한 흐름에 따라 Facebook SDK를 애플리케이션에 통합합니다. Amazon Cognito 자격 증명 풀은 Facebook 액세스 토큰을 사용하여 Amazon Cognito 자격 증명에 연결된 고유한 사용자 식별자를 생성합니다.

Amazon Cognito 자격 증명 풀 콘솔에서 ID 제공업체 구성

다음 절차를 사용하여 ID 제공업체를 구성합니다.

Facebook ID 제공업체(idP)를 추가하려면
  1. Amazon Cognito 콘솔에서 자격 증명 풀을 선택합니다. 자격 증명 풀을 선택합니다.

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

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

  4. Facebook을 선택합니다.

  5. 개발자용 Meta에서 생성한 OAuth 프로젝트의 앱 ID를 입력합니다. 자세한 내용은 개발자용 Meta 문서의 Facebook 로그인을 참조하세요.

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

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

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

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

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

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

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

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

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

Facebook 사용

Android

Facebook 인증을 추가하려면 먼저 Facebook 안내서를 따라 Facebook SDK를 애플리케이션에 통합합니다. 그런 다음 Facebook으로 로그인(Login with Facebook) 버튼을 Android 사용자 인터페이스에 추가합니다. Facebook SDK는 세션 객체를 사용하여 상태를 추적합니다. Amazon Cognito은 이 세션 객체의 액세스 토큰을 사용하여 사용자를 인증하고, 고유 식별자를 생성하며, 필요한 경우 사용자에게 다른 AWS 리소스에 대한 액세스 권한을 부여합니다.

Facebook SDK로 사용자를 인증한 후에는 Amazon Cognito 자격 증명 공급자에 세션 토큰을 추가합니다.

Facebook SDK 4.0 이상:

Map<String, String> logins = new HashMap<String, String>(); logins.put("graph.facebook.com", AccessToken.getCurrentAccessToken().getToken()); credentialsProvider.setLogins(logins);

Facebook SDK 4.0 이전:

Map<String, String> logins = new HashMap<String, String>(); logins.put("graph.facebook.com", Session.getActiveSession().getAccessToken()); credentialsProvider.setLogins(logins);

Facebook 로그인 프로세스에서 해당 SDK의 싱글톤 세션을 초기화합니다. Facebook 세션 객체에는 Amazon Cognito가 인증된 최종 사용자의 AWS 자격 증명을 생성하는 데 사용하는 OAuth 토큰이 포함되어 있습니다. 또한 Amazon Cognito는 사용자 데이터베이스에 이 특정 Facebook 자격 증명과 일치하는 사용자가 있는지 확인하는 데에도 이 토큰을 사용합니다. 사용자가 이미 있으면 API가 기존의 식별자를 반환합니다. 그렇지 않으면 API에서 새 식별자를 반환합니다. 클라이언트 SDK가 로컬 디바이스에서 식별자를 자동으로 캐시합니다.

참고

로그인 맵을 설정한 후 refresh 또는 get을 호출하여 AWS 자격 증명을 가져옵니다.

iOS - Objective-C

Facebook 인증을 추가하려면 먼저 Facebook 안내서를 따라 Facebook SDK를 애플리케이션에 통합합니다. 그런 다음 Facebook으로 로그인 버튼을 귀하의 사용자 인터페이스에 추가합니다. Facebook SDK는 세션 객체를 사용하여 상태를 추적합니다. Amazon Cognito는 이 세션 객체의 액세스 토큰을 사용하여 사용자를 인증하고 고유한 Amazon Cognito 자격 증명 풀(페더레이션 자격 증명)에 바인딩합니다.

Amazon Cognito에 Facebook 액세스 토큰을 제공하려면 AWSIdentityProviderManager 프로토콜을 구현합니다.

logins 메서드를 구현할 때 AWSIdentityProviderFacebook이 포함된 사전을 반환합니다. 다음 코드 예와 같이 이 사전은 키 역할을 하고 인증된 Facebook 사용자에게서 받은 현재 액세스 토큰은 값 역할을 합니다.

- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins { FBSDKAccessToken* fbToken = [FBSDKAccessToken currentAccessToken]; if(fbToken){ NSString *token = fbToken.tokenString; return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : token }]; }else{ return [AWSTask taskWithError:[NSError errorWithDomain:@"Facebook Login" code:-1 userInfo:@{@"error":@"No current Facebook access token"}]]; } }

AWSCognitoCredentialsProvider를 인스턴스화할 때 생성자에서 AWSIdentityProviderManager의 값으로 identityProviderManager를 구현하는 클래스를 전달하십시오. 자세한 내용을 보려면 AWSCognitoCredentialsProvider참조 페이지로 이동하여 initWithRegionType:identityPoolId: 을 선택하십시오identityProviderManager.

iOS - Swift

Facebook 인증을 추가하려면 먼저 Facebook 안내서를 따라 Facebook SDK를 애플리케이션에 통합합니다. 그런 다음 Facebook으로 로그인 버튼을 귀하의 사용자 인터페이스에 추가합니다. Facebook SDK는 세션 객체를 사용하여 상태를 추적합니다. Amazon Cognito는 이 세션 객체의 액세스 토큰을 사용하여 사용자를 인증하고 고유한 Amazon Cognito 자격 증명 풀(페더레이션 자격 증명)에 바인딩합니다.

Amazon Cognito에 Facebook 액세스 토큰을 제공하려면 AWSIdentityProviderManager 프로토콜을 구현합니다.

logins 메서드를 구현할 때 AWSIdentityProviderFacebook이 포함된 사전을 반환합니다. 다음 코드 예와 같이 이 사전은 키 역할을 하고 인증된 Facebook 사용자에게서 받은 현재 액세스 토큰은 값 역할을 합니다.

class FacebookProvider: NSObject, AWSIdentityProviderManager { func logins() -> AWSTask<NSDictionary> { if let token = AccessToken.current?.authenticationToken { return AWSTask(result: [AWSIdentityProviderFacebook:token]) } return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"])) } }

AWSCognitoCredentialsProvider를 인스턴스화할 때 생성자에서 AWSIdentityProviderManager의 값으로 identityProviderManager를 구현하는 클래스를 전달하십시오. 자세한 내용을 보려면 AWSCognitoCredentialsProvider참조 페이지로 이동하여 initWithRegionType:identityPoolId: 을 선택하십시오identityProviderManager.

JavaScript

Facebook 인증을 추가하려면 Facebook Login for the Web(웹용 Facebook 로그인)에 따라 웹 사이트에 Facebook으로 로그인(Login with Facebook) 버튼을 추가합니다. Facebook SDK는 세션 객체를 사용하여 상태를 추적합니다. Amazon Cognito은 이 세션 객체의 액세스 토큰을 사용하여 사용자를 인증하고, 고유 식별자를 생성하며, 필요한 경우 사용자에게 다른 AWS 리소스에 대한 액세스 권한을 부여합니다.

Facebook SDK로 사용자를 인증한 후에는 Amazon Cognito 자격 증명 공급자에 세션 토큰을 추가합니다.

FB.login(function (response) { // Check if the user logged in successfully. if (response.authResponse) { console.log('You are now logged in.'); // Add the Facebook access token to the Amazon Cognito credentials login map. AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { 'graph.facebook.com': response.authResponse.accessToken } }); // Obtain AWS credentials AWS.config.credentials.get(function(){ // Access AWS resources here. }); } else { console.log('There was a problem logging you in.'); } });

Facebook SDK는 Amazon Cognito가 인증된 최종 사용자의 AWS 자격 증명을 생성하는 데 사용하는 OAuth 토큰을 받습니다. 또한 Amazon Cognito는 사용자 데이터베이스에 이 Facebook 자격 증명과 일치하는 사용자가 있는지 확인하는 데에도 이 토큰을 사용합니다. 사용자가 이미 있으면 API가 기존의 식별자를 반환합니다. 그렇지 않으면 새 식별자가 반환됩니다. 식별자는 로컬 디바이스에서 클라이언트 SDK에 의해 자동으로 캐시됩니다.

참고

로그인 맵을 설정한 후 refresh 또는 get을 호출하여 자격 증명을 가져옵니다. 코드 예제는 README 파일의 “사용 사례 17, Cognito ID와 사용자 풀 통합”을 참조하십시오. JavaScript

Unity

Facebook 인증을 추가하려면 먼저 Facebook 안내서를 따라 Facebook SDK를 애플리케이션에 통합합니다. Amazon Cognito는 FB 객체의 Facebook 액세스 토큰을 사용하여 Amazon Cognito 자격 증명에 연결된 고유한 사용자 식별자를 생성합니다.

Facebook SDK로 사용자를 인증한 후에는 Amazon Cognito 자격 증명 공급자에 세션 토큰을 추가합니다.

void Start() { FB.Init(delegate() { if (FB.IsLoggedIn) { //User already logged in from a previous session AddFacebookTokenToCognito(); } else { FB.Login ("email", FacebookLoginCallback); } }); } void FacebookLoginCallback(FBResult result) { if (FB.IsLoggedIn) { AddFacebookTokenToCognito(); } else { Debug.Log("FB Login error"); } } void AddFacebookTokenToCognito() { credentials.AddLogin ("graph.facebook.com", AccessToken.CurrentAccessToken.TokenString); }

FB.AccessToken을 사용하기 전에 FB.Login()을 호출하고 FB.IsLoggedIn이 true인지 확인합니다.

Xamarin

Android용 Xamarin:

public void InitializeFacebook() { FacebookSdk.SdkInitialize(this.ApplicationContext); callbackManager = CallbackManagerFactory.Create(); LoginManager.Instance.RegisterCallback(callbackManager, new FacebookCallback &lt; LoginResult &gt; () { HandleSuccess = loginResult = &gt; { var accessToken = loginResult.AccessToken; credentials.AddLogin("graph.facebook.com", accessToken.Token); //open new activity }, HandleCancel = () = &gt; { //throw error message }, HandleError = loginError = &gt; { //throw error message } }); LoginManager.Instance.LogInWithReadPermissions(this, new List &lt; string &gt; { "public_profile" }); }

iOS용 Xamarin:

public void InitializeFacebook() { LoginManager login = new LoginManager(); login.LogInWithReadPermissions(readPermissions.ToArray(), delegate(LoginManagerLoginResult result, NSError error) { if (error != null) { //throw error message } else if (result.IsCancelled) { //throw error message } else { var accessToken = loginResult.AccessToken; credentials.AddLogin("graph.facebook.com", accessToken.Token); //open new view controller } }); }