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

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

將臉書設定為身分集區 IdP

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

設定 Facebook

請先向 Facebook 註冊您的應用程式,再驗證 Facebook 使用者,並與 Facebook API 互動。

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

設定 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 身分驗證,請先遵循下方適用的流程,將 Facebook 軟體開發套件整合至您的應用程式中。Amazon Cognito 身分集區會使用 Facebook 存取權杖以產生與 Cognito 身分相關的唯一使用者識別符。

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

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

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

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

  3. 選取 新增身分供應商

  4. 選擇 Facebook

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

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

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

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

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

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

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

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

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

  8. 選取儲存變更

使用 Facebook

Android

若要新增 Facebook 身分驗證,請先遵循 Facebook 指南,並將 Facebook 軟體開發套件整合至您的應用程式中。然後,新增 Login with Facebook (使用 Facebook 登入) 按鈕至您的 Android 使用者界面。Facebook 軟體開發套件會使用工作階段物件來追蹤其狀態。Amazon Cognito 會使用來自此工作階段物件的存取權杖來驗證使用者、產生唯一識別符,並視需要授予使用者對其他 AWS 資源的存取權。

使用 Facebook 軟體開發套件來驗證您的使用者之後,請將工作階段權杖新增至 Amazon Cognito 憑證供應商。

Facebook 軟體開發套件 4.0 或更新版本:

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

4.0 之前的 Facebook 軟體開發套件:

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

Facebook 登入程序會在其軟體開發套件中初始化單一工作階段。Facebook 工作階段物件包含 OAuth 權杖,可供 Amazon Cognito 用來為已驗證的最終使用者產生 AWS 憑證。Amazon Cognito 也會使用權杖來檢查您的使用者資料庫中是否有符合此特定 Facebook 身分的使用者存在。如果該使用者已存在,API 會傳回現有的識別符,否則,API 會傳回新的識別符。用戶端開發套件會自動將識別符快取在本機裝置上。

注意

設定登入對應之後,必須發出 refreshget 呼叫,以擷取 AWS 憑證。

iOS - Objective-C

若要新增 Facebook 身分驗證,請先遵循 Facebook 指南,並將 Facebook 軟體開發套件整合至您的應用程式中。然後,將 Login with Facebook (使用 Facebook 登入) 按鈕新增至您的使用者界面。Facebook 軟體開發套件會使用工作階段物件來追蹤其狀態。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 身分驗證,請先遵循 Facebook 指南,並將 Facebook 軟體開發套件整合至您的應用程式中。然後,將 Login with Facebook (使用 Facebook 登入) 按鈕新增至您的使用者界面。Facebook 軟體開發套件會使用工作階段物件來追蹤其狀態。Amazon Cognito 會使用來自此工作階段物件的存取權杖進行使用者身分驗證,並將其繫結至唯一 Amazon Cognito 身分集區 (聯合身分)。

若要提供 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 登入) 按鈕。Facebook 軟體開發套件會使用工作階段物件來追蹤其狀態。Amazon Cognito 會使用來自此工作階段物件的存取權杖來驗證使用者、產生唯一識別符,並視需要授予使用者對其他 AWS 資源的存取權。

使用 Facebook 軟體開發套件來驗證您的使用者之後,請將工作階段權杖新增至 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 軟體開發套件會取得 OAuth 權杖,可供 Amazon Cognito 用來為已驗證的最終使用者產生 AWS 憑證。Amazon Cognito 也會使用權杖來檢查您的使用者資料庫中是否有符合此特定 Facebook 身分的使用者存在。如果該使用者已存在,API 會傳回現有的識別符,否則就會傳回新的識別符。用戶端軟體開發套件會自動將識別符快取在本機裝置上。

注意

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

Unity

若要新增 Facebook 身分驗證,請先遵循 Facebook 指南,並將 Facebook 軟體開發套件整合至您的應用程式中。Amazon Cognito 會使用來自 FB 物件的 Facebook 存取權杖,產生與 Amazon Cognito 身分相關聯的唯一使用者識別符。

使用 Facebook 軟體開發套件來驗證您的使用者之後,請將工作階段權杖新增至 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 } }); }