Facebook (ID プール) - Amazon Cognito

Facebook (ID プール)

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

Facebook のセットアップ

Facebook ユーザーの認証と、Facebook API との統合を開始するには、事前にアプリケーションを Facebook に登録する必要があります。

Facebook デベロッパーポータルは、アプリケーションを設定するプロセスについて説明します。このプロセスをまだ実行していない場合は、Amazon Cognito ID プールで Facebook を統合する前に実行しておく必要があります。

Facebook をセットアップする

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

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

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

Android

Facebook の Getting Started ガイドに、Facebook ログインとの統合に関する追加情報が提供されています。

iOS - Objective-C

Facebook の Getting Started ガイドに、Facebook ログインとの統合に関する追加情報が提供されています。

iOS - Swift

Facebook の Getting Started ガイドに、Facebook ログインとの統合に関する追加情報が提供されています。

JavaScript

Facebook の Getting Started ガイドに、Facebook ログインとの統合に関する追加情報が提供されています。

Unity

Facebook の Getting Started ガイドに、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. 下にスクロールし、[認証プロバイダー] を選択して展開します。

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

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

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

Facebook の使用

Android

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 を返します。それ以外の場合、新しい ID が返されます。ID はローカルデバイスでクライアント SDK によって自動的にキャッシュされます。

注記

ログインマップを設定した後、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 をインスタンス化するときに、コンストラクターで AWSIdentityProviderManager の値として identityProviderManager を実装するクラスを渡します。詳細については、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 ガイドに従ってアプリケーションにその 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.Login() を呼び出し、FB.IsLoggedIn を使用する前に、FB.AccessToken が 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 } }); }