Facebook (ID プール) - Amazon Cognito

Facebook (ID プール)

Amazon Cognito ID プールは、モバイルアプリケーションユーザーにフェデレートされた認証を提供するために Facebook と統合します。このセクションでは、IdP として Facebook に対してアプリケーションを登録し、セットアップする方法について説明します。

Facebook のセットアップ

Facebook ユーザーを認証し、Facebook API と統合するには、事前にアプリケーションを Facebook に登録します。

Facebook デベロッパーポータルは、アプリケーションのセットアップに役立ちます。Amazon Cognito アイデンティティプールに Facebook を統合する前に、次の手順を実行してください。

Facebook のセットアップ

  1. Facebook デベロッパーポータルで、Facebook 認証情報を使用してログインします。

  2. アプリ メニューの Add a New App (新しいアプリを追加する)を選択します。

  3. プラットフォームを選択し、クイックスタートプロセスを完了します。

Android

Android アプリと Facebook ログインとの統合に関する詳細情報については、Facebook 入門ガイドを参照してください。

iOS - Objective-C

iOS Objective-C アプリと Facebook ログインとの統合に関する詳細情報については、Facebook 入門ガイドを参照してください。

iOS - Swift

iOS Swift アプリと Facebook ログインとの統合に関する詳細情報については、Facebook 入門ガイドを参照してください。

JavaScript

JavaScript ウェブアプリと Facebook ログインとの統合に関する詳細情報については、Facebook 入門ガイドを参照してください。

Unity

Unity アプリと Facebook ログインとの統合に関する詳細情報については、Facebook 入門ガイドを参照してください。

Xamarin

Facebook 認証を追加するには、まず以下の適切なフローに従って、アプリケーションに Facebook SDK を統合します。Amazon Cognito ID プールは、Amazon Cognito アイデンティティに関連付けられた一意のユーザー識別子を生成するために Facebook アクセストークンを使用します。

Amazon Cognito フェデレーティッド ID コンソールで外部プロバイダーを設定する

以下の手順を使用して、外部プロバイダーを設定します。

  1. Amazon Cognito コンソールのホームページで [Manage Identity Pools] (ID プールの管理) をクリックします。

  2. 外部プロバイダーとして Facebook を有効にする ID プールの名前を選択します。ID プールの [Dashboard] (ダッシュボード) ページが表示されます。

  3. [ダッシュボード] ページの右上にある、[ID プールの編集] を選択します。[Edit identity pool] (ID プールの編集) ページが表示されます。

  4. 下にスクロールし、[Authentication providers] (認証プロバイダー) を選択してセクションを展開します。

  5. [Facebook] タブを選択します。

  6. [ロック解除] を選択します。

  7. Facebook から取得した Facebook アプリ ID を入力して、[変更の保存] を選択します。

Facebook の使用

Android

Facebook 認証を追加するには、まず Facebook ガイドに従って、アプリケーションに Facebook SDK を統合します。次に、[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 セッションオブジェクトには、認証されたエンドユーザー用の AWS 認証情報を生成するために Amazon Cognito が使用する OAuth トークンが含まれています。Amazon Cognito は、この特定の Facebook アイデンティティに一致するユーザーの存在についてユーザーデータベースをチェックするためにもこのトークンを使用します。既にユーザーに存在する場合、API は既存の ID を返します。それ以外の場合、API は新しい ID を返します。クライアント SDK は、ローカルデバイスで ID を自動的にキャッシュします。

注記

ログインマップを設定した後、refresh または get を呼び出して、AWS 認証情報を取得します。

iOS - Objective-C

Facebook 認証を追加するには、まず Facebook ガイドに従って、アプリケーションに Facebook SDK を統合します。次に、[Login with Facebook (Facebook でログイン)] ボタンを ユーザーインターフェイスに追加します。Facebook SDK は、その状態の追跡にセッションオブジェクトを使用します。Amazon Cognito は、このセッションオブジェクトからのアクセストークンを使用してユーザーを認証し、一意の Amazon Cognito ID プール (フェデレーティッド ID) にバインドします。

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をインスタンス化するときに、コンストラクターで identityProviderManager の値として AWSIdentityProviderManager を実装するクラスを渡します。詳細については、AWSCognitoCredentialsProvider リファレンスページに移動し、initWithRegionType:identityPoolId:identityProviderManager を選択してください。

iOS - Swift

Facebook 認証を追加するには、まず Facebook ガイドに従って、アプリケーションに Facebook SDK を統合します。次に、[Login with Facebook (Facebook でログイン)] ボタンを ユーザーインターフェイスに追加します。Facebook SDK は、その状態の追跡にセッションオブジェクトを使用します。Amazon Cognito は、このセッションオブジェクトからのアクセストークンを使用してユーザーを認証し、一意の Amazon Cognito ID プール (フェデレーティッド ID) にバインドします。

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 ログイン」に従って、ウェブサイトに「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 は、認証されたエンドユーザー用の AWS 認証情報を生成するために Amazon Cognito が使用する OAuth トークンを取得します。Amazon Cognito は、この特定の Facebook アイデンティティに一致するユーザーの存在についてユーザーデータベースをチェックするためにもこのトークンを使用します。既にユーザーに存在する場合、API は既存の ID を返します。それ以外の場合、新しい ID が返されます。ID はローカルデバイスでクライアント SDK によって自動的にキャッシュされます。

注記

ログインマップを設定した後、refresh または get を呼び出して、認証情報を取得します。コード例については、JavaScript の README ファイルの「ユースケース 17: ユーザープールと Cognito ID の統合」を参照してください。

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

Xamarin for Android:

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

Xamarin for iOS:

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