ID プール IdP としての Facebook のセットアップ - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ID プール IdP としての Facebook のセットアップ

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 プロバイダーを設定します。

Facebook ID プロバイダー (IdP) を追加するには
  1. Amazon Cognito コンソール[ID プールの管理] をクリックします。アイデンティティプールを選択します。

  2. [ユーザーアクセス] タブを選択します。

  3. [ID プロバイダーを追加] を選択します。

  4. [Facebook] を選択します。

  5. Meta for Developers で作成した OAuth プロジェクトのアプリ ID を入力します。詳細については、Meta for Developers ドキュメントの「Facebook ログイン」を参照してください。

  6. Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエストするロールを設定するには、[ロール設定] を設定します。

    1. その IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。

      1. [ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースクレーム、クレームを比較するオペレータ、このロール選択と一致するおよびロール割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

      2. [ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

  7. Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。

    1. プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

    2. sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピングを使用] を選択します。

    3. プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピングを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

  8. [変更を保存] を選択します。

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