本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將臉書設定為身分集區 IdP
Amazon Cognito 身分集區與 Facebook 整合,可為您的行動應用程式使用者提供聯合身分驗證。本節說明如何使用 Facebook 做為 IdP 來註冊及設定您的應用程式。
設定 Facebook
在您驗證臉書用戶並與臉書互動之前,請先向臉書註冊您的應用程序APIs。
Facebook 開發人員入口網站
注意
Amazon Cognito 可身份集區聯盟與 Facebook 有限登錄
設定 Facebook
-
在 Facebook 開發人員入口網站
中,使用您的 Facebook 登入資料來登入。 -
從 Apps (應用程式) 功能表中,選取 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 身份驗證,請首先按照以下適當的流程SDK將 Facebook 集成到您的應用程序中。Amazon Cognito 身分集區會使用 Facebook 存取權杖以產生與 Cognito 身分相關的唯一使用者識別符。
在 Amazon Cognito 身分池主控台中設定身分提供者
使用下列程序設定您的身分提供者。
若要新增 Facebook 身分提供者 (IdP)
-
從 Amazon Cognito 主控台
選擇 身分池。選取身分池。 -
選擇 使用者存取權 索引標籤。
-
選取 新增身分供應商。
-
選擇 Facebook。
-
輸入您在 Meta 為開發人員
建立的OAuth專案的應用程式 ID。如需詳細資訊,請參閱開發人員文件中繼資料中的 Facebook 登入 。 -
若要設定 Amazon Cognito 向已通過此提供者進行身分驗證的使用者發布憑證時的角色,請設定 角色設定。
-
您可以為該 IdP 使用者指派設定 已驗證角色 時的 預設角色,或您可以 選擇具有規則的角色。
-
如果您選擇 使用規則選擇角色,請輸入使用者身分驗證的 宣告 來源、比較宣告的 操作員、導致符合角色選擇的 值,以及當符合 角色指派 時您要指派的 角色。選取 新增另一項 以根據不同的條件建立其他規則。
-
選擇 角色解析。當您的使用者宣告與您的規則不符時,您可以拒絕憑證或向 已驗證角色 發出憑證。
-
-
-
若要變更透過此提供者驗證使用者,Amazon Cognito 發布憑證時指派的主要索引標籤,請設定 存取控制的屬性。
-
若不套用主要索引標籤,請選擇 非作用中。
-
若要根據
sub
和aud
宣告套用主要索引標籤,請選擇 使用預設對應。 -
若要建立您自己的自訂屬性結構描述至主要索引標籤,請選擇 使用自訂對應。然後,輸入您要從每個 宣告 中獲取的 標籤金鑰,顯示於索引標籤當中。
-
-
選取儲存變更。
使用 Facebook
Android
要添加臉書身份驗證,請首先按照 Facebook 指南
透過 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 指南
若要提供 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
iOS - Swift
要添加臉書身份驗證,請首先按照 Facebook 指南
注意
Amazon Cognito 可身份集區聯盟與 Facebook 有限登錄
若要提供 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
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 獲得了一個OAuth令牌,Amazon Cognito 用於為您的身份驗證的最終用戶生成 AWS 憑據。Amazon Cognito 也會使用權杖來檢查您的使用者資料庫中是否有符合此特定 Facebook 身分的使用者存在。如果使用者已存在,則會API傳回現有的識別碼。否則就會傳回新的識別符。識別碼會由本機裝置SDK上的用戶端自動快取。
注意
設定登入對應之後,必須發出 refresh
或 get
呼叫,以取得憑證。如需程式碼範例,請參閱JavaScript README檔
Unity
要添加臉書身份驗證,請首先按照 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
適用於 Android 的 Xamarin:
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" }); }
適用於 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 } }); }