Facebook (ID プール)
Amazon Cognito ID プールは、モバイルアプリケーションユーザーにフェデレートされた認証を提供するために Facebook と統合します。このセクションでは、IdP として Facebook に対してアプリケーションを登録し、セットアップする方法について説明します。
Facebook のセットアップ
Facebook ユーザーを認証し、Facebook API と統合するには、事前にアプリケーションを Facebook に登録します。
Facebook デベロッパーポータル
Facebook のセットアップ
-
Facebook デベロッパーポータル
で、Facebook 認証情報を使用してログインします。 -
アプリ メニューの Add a New App (新しいアプリを追加する)を選択します。
-
プラットフォームを選択し、クイックスタートプロセスを完了します。
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 コンソールで外部プロバイダーを設定する
以下の手順を使用して、外部プロバイダーを設定します。
-
Amazon Cognito コンソールのホームページ
で [Manage Identity Pools] (ID プールの管理) をクリックします。 -
外部プロバイダーとして Facebook を有効にする ID プールの名前を選択します。ID プールの [Dashboard] (ダッシュボード) ページが表示されます。
-
[ダッシュボード] ページの右上にある、[ID プールの編集] を選択します。[Edit identity pool] (ID プールの編集) ページが表示されます。
-
下にスクロールし、[Authentication providers] (認証プロバイダー) を選択してセクションを展開します。
-
[Facebook] タブを選択します。
-
[ロック解除] を選択します。
-
Facebook から取得した Facebook アプリ ID を入力して、[変更の保存] を選択します。
Facebook の使用
Android
Facebook 認証を追加するには、まず Facebook ガイド
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 ガイド
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
iOS - Swift
Facebook 認証を追加するには、まず Facebook ガイド
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
JavaScript
Facebook 認証を追加するには、「ウェブ用の Facebook ログイン
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 ファイル
Unity
Facebook 認証を追加するには、まず Facebook ガイド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 < LoginResult > () { HandleSuccess = loginResult = > { var accessToken = loginResult.AccessToken; credentials.AddLogin("graph.facebook.com", accessToken.Token); //open new activity }, HandleCancel = () = > { //throw error message }, HandleError = loginError = > { //throw error message } }); LoginManager.Instance.LogInWithReadPermissions(this, new List < string > { "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 } }); }