將臉書設定為身分集區 IdP - Amazon Cognito

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將臉書設定為身分集區 IdP

Amazon Cognito 身分集區與 Facebook 整合,可為您的行動應用程式使用者提供聯合身分驗證。本節說明如何使用 Facebook 做為 IdP 來註冊及設定您的應用程式。

設定 Facebook

在您驗證臉書用戶並與臉書互動之前,請先向臉書註冊您的應用程序APIs。

Facebook 開發人員入口網站可幫助您設定應用程式。您在 Amazon Cognito 身分集區中整合 Facebook 之前,請先執行此操作程序:

注意

Amazon Cognito 可身份集區聯盟與 Facebook 有限登錄不兼容。如需有關如何在不超過限制登入設定的權限的情況下設定 iOS 版 Facebook 登入的詳細資訊,請參閱 iOS 的 Facebook 登入-開發人員適用的 Meta 快速入門。

設定 Facebook
  1. Facebook 開發人員入口網站中,使用您的 Facebook 登入資料來登入。

  2. Apps (應用程式) 功能表中,選取 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 身份驗證,請首先按照以下適當的流程SDK將 Facebook 集成到您的應用程序中。Amazon Cognito 身分集區會使用 Facebook 存取權杖以產生與 Cognito 身分相關的唯一使用者識別符。

在 Amazon Cognito 身分池主控台中設定身分提供者

使用下列程序設定您的身分提供者。

若要新增 Facebook 身分提供者 (IdP)
  1. Amazon Cognito 主控台選擇 身分池。選取身分池。

  2. 選擇 使用者存取權 索引標籤。

  3. 選取 新增身分供應商

  4. 選擇 Facebook

  5. 輸入您在 Meta 為開發人員建立的OAuth專案的應用程式 ID。如需詳細資訊,請參閱開發人員文件中繼資料中的 Facebook 登入

  6. 若要設定 Amazon Cognito 向已通過此提供者進行身分驗證的使用者發布憑證時的角色,請設定 角色設定

    1. 您可以為該 IdP 使用者指派設定 已驗證角色 時的 預設角色,或您可以 選擇具有規則的角色

      1. 如果您選擇 使用規則選擇角色,請輸入使用者身分驗證的 宣告 來源、比較宣告的 操作員、導致符合角色選擇的 ,以及當符合 角色指派 時您要指派的 角色。選取 新增另一項 以根據不同的條件建立其他規則。

      2. 選擇 角色解析。當您的使用者宣告與您的規則不符時,您可以拒絕憑證或向 已驗證角色 發出憑證。

  7. 若要變更透過此提供者驗證使用者,Amazon Cognito 發布憑證時指派的主要索引標籤,請設定 存取控制的屬性

    1. 若不套用主要索引標籤,請選擇 非作用中

    2. 若要根據 subaud 宣告套用主要索引標籤,請選擇 使用預設對應

    3. 若要建立您自己的自訂屬性結構描述至主要索引標籤,請選擇 使用自訂對應。然後,輸入您要從每個 宣告 中獲取的 標籤金鑰,顯示於索引標籤當中。

  8. 選取儲存變更

使用 Facebook

Android

要添加臉書身份驗證,請首先按照 Facebook 指南進行操作,並SDK將 Facebook 集成到您的應用程序中。然後,新增 Login with Facebook (使用 Facebook 登入) 按鈕至您的 Android 使用者界面。臉書SDK使用會話對象來跟踪其狀態。Amazon Cognito 使用此工作階段物件中的存取權杖來驗證使用者、產生唯一識別碼,並視需要授與使用者存取其他 AWS 資源。

透過 Facebook 驗證使用者後SDK,請將工作階段權杖新增至 Amazon Cognito 登入資料提供者。

臉書 SDK 4.0 或以上版本:

Map<String, String> logins = new HashMap<String, String>(); logins.put("graph.facebook.com", AccessToken.getCurrentAccessToken().getToken()); credentialsProvider.setLogins(logins);

4.0 SDK 之前的臉書:

Map<String, String> logins = new HashMap<String, String>(); logins.put("graph.facebook.com", Session.getActiveSession().getAccessToken()); credentialsProvider.setLogins(logins);

Facebook 登錄過程初始化其中的單例會話。SDKFacebook 會話對象包含一個OAuth令牌,Amazon Cognito 用於為您的身份驗證的最終用戶生成 AWS 憑據。Amazon Cognito 也會使用權杖來檢查您的使用者資料庫中是否有符合此特定 Facebook 身分的使用者存在。如果使用者已存在,則會API傳回現有的識別碼。否則,API返回一個新的標識符。用戶端SDK會自動快取本機裝置上的識別碼。

注意

設定登入對應後,請撥打電話refresh或擷get取 AWS 認證。

iOS - Objective-C

要添加臉書身份驗證,請首先按照 Facebook 指南進行操作,並SDK將 Facebook 集成到您的應用程序中。然後,將 Login with Facebook (使用 Facebook 登入) 按鈕新增至您的使用者界面。臉書SDK使用會話對象來跟踪其狀態。Amazon Cognito 會使用來自此工作階段物件的存取權杖進行使用者身分驗證,並將其繫結至唯一 Amazon Cognito 身分集區 (聯合身分)。

若要提供 Facebook 存取權杖給 Amazon Cognito,請實作 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 指南進行操作,並SDK將 Facebook 集成到您的應用程序中。然後,將 Login with Facebook (使用 Facebook 登入) 按鈕新增至您的使用者界面。臉書SDK使用會話對象來跟踪其狀態。Amazon Cognito 會使用來自此工作階段物件的存取權杖進行使用者身分驗證,並將其繫結至唯一 Amazon Cognito 身分集區 (聯合身分)。

注意

Amazon Cognito 可身份集區聯盟與 Facebook 有限登錄不兼容。如需有關如何在不超過限制登入設定的權限的情況下設定 iOS 版 Facebook 登入的詳細資訊,請參閱 iOS 的 Facebook 登入-開發人員適用的 Meta 快速入門。

若要提供 Facebook 存取權杖給 Amazon Cognito,請實作 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 登入,在您的網站上新增 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 獲得了一個OAuth令牌,Amazon Cognito 用於為您的身份驗證的最終用戶生成 AWS 憑據。Amazon Cognito 也會使用權杖來檢查您的使用者資料庫中是否有符合此特定 Facebook 身分的使用者存在。如果使用者已存在,則會API傳回現有的識別碼。否則就會傳回新的識別符。識別碼會由本機裝置SDK上的用戶端自動快取。

注意

設定登入對應之後,必須發出 refreshget 呼叫,以取得憑證。如需程式碼範例,請參閱JavaScript README檔案中的「使用案例 17,整合使用者集區與 Cognito 身分」。

Unity

要添加臉書身份驗證,請首先按照 Facebook 指南進行操作,並SDK將 Facebook 集成到您的應用程序中。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 } }); }