Facebook(자격 증명 풀) - Amazon Cognito

Facebook(자격 증명 풀)

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 Getting Started Guide(Facebook 시작 안내서)를 참조하세요.

Unity

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

Xamarin

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

Amazon Cognito 페더레이션 자격 증명 콘솔에서 외부 공급자 구성

다음 절차를 사용하여 외부 공급자를 구성합니다.

  1. Amazon Cognito 콘솔 홈 페이지에서 자격 증명 풀 관리(Manage Identity Pools)를 선택합니다.

  2. Facebook을 외부 공급자로 사용할 자격 증명 풀의 이름을 선택합니다. 자격 증명 풀에 대한 대시보드 페이지가 표시됩니다.

  3. 대시보드 페이지의 우측 상단 모서리에서 자격 증명 풀 편집을 선택합니다. 자격 증명 풀 편집 페이지가 표시됩니다.

  4. 아래로 스크롤하고 인증 공급자(Authentication providers)를 선택하여 섹션을 확장합니다.

  5. Facebook 탭을 선택합니다.

  6. 잠금 해제를 선택합니다.

  7. Facebook에서 가져온 Facebook 앱 ID를 입력하고 변경 사항 저장을 선택합니다.

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을 호출하여 자격 증명을 가져옵니다. 코드 예제는 JavaScript README 파일의 "Use Case 17, Integrating User Pools with Cognito Identity"를 참조하세요.

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 } }); }