將 Amazon 登入設定為身分集區 IdP - Amazon Cognito

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

將 Amazon 登入設定為身分集區 IdP

Amazon Cognito 身分集區與 Amazon 登入搭配使用,為您的行動和 Web 應用程式使用者提供聯合身分驗證。本節說明如何使用登入 Amazon 做為身分提供者 (IdP) 來註冊及設定您的應用程式。

設定登入 Amazon 以使用開發人員入口網站中的 Amazon Cognito。如需詳細資訊,請參閱使用 Amazon 登入中的使用 Amazon 設定登入FAQ。

注意

若要將登入 Amazon 整合至 Xamarin 應用程式,請遵循 Xamarin 入門指南

注意

您原本就無法在 Unity 平台上整合登入 Amazon。請改用 Web 檢視,然後進行瀏覽器登入流程。

設定登入 Amazon

實作 Login with Amazon

Amazon 開發人員入口網站 中,您可以設定OAuth應用程式以與身分集區整合、尋找使用 Amazon 登入文件,以及下載 SDKs。選擇 Developer console (開發人員主控台),然後選擇開發人員入口網站中的 Login with Amazon (登入 Amazon)。您可以為您的應用程式建立安全性描述檔,然後在您的應用程式中建置登入 Amazon 身分驗證機制。請參閱 取得憑證 以取得如何將登入 Amazon 身分驗證與應用程式整合的詳細資訊。

Amazon 會為您的新安全設定檔發出 OAuth 2.0 用戶端 ID。您可以在安全性描述檔的 Web Settings (Web 設定) 索引標籤上找到 client ID (用戶端 ID)。在您身分集區中登入 Amazon IdP 的應用程式 ID欄位中輸入安全性設定檔 ID

注意

在您身分集區中登入 Amazon IdP 的應用程式 ID欄位中輸入安全性設定檔 ID。這與使用用戶端 ID 的使用者集區不同。

在 Amazon Cognito 主控台中設定外部供應商

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

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

  3. 選取 新增身分供應商

  4. 選擇 Login with Amazon

  5. 輸入您在使用 Amazon 登入 時建立之OAuth專案的應用程式 ID。如需詳細資訊,請參閱 Login with Amazon 說明文件

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

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

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

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

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

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

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

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

  8. 選取儲存變更

使用 Login with Amazon:Android

驗證 Amazon 登入之後,您可以在 TokenListener 介面 onSuccess 方法中將權杖傳遞給 Amazon Cognito 憑證提供者。程式碼看起來像這樣:

@Override public void onSuccess(Bundle response) { String token = response.getString(AuthzConstants.BUNDLE_KEY.TOKEN.val); Map<String, String> logins = new HashMap<String, String>(); logins.put("www.amazon.com", token); credentialsProvider.setLogins(logins); }

使用 Login with Amazon:iOS - Objective-C

驗證 Amazon 登入之後,您可以透過 requestDidSucceed 方法將權杖傳遞給 Amazon Cognito 憑證提供者AMZNAccessTokenDelegate:

- (void)requestDidSucceed:(APIResult \*)apiResult { if (apiResult.api == kAPIAuthorizeUser) { [AIMobileLib getAccessTokenForScopes:[NSArray arrayWithObject:@"profile"] withOverrideParams:nil delegate:self]; } else if (apiResult.api == kAPIGetAccessToken) { credentialsProvider.logins = @{ @(AWSCognitoLoginProviderKeyLoginWithAmazon): apiResult.result }; } }}

使用 Login with Amazon:iOS - Swift

對 Amazon 登入進行身分驗證之後,您可以在 AMZNAccessTokenDelegaterequestDidSucceed 方法中,將權杖傳遞給 Amazon Cognito 憑證供應商:

func requestDidSucceed(apiResult: APIResult!) { if apiResult.api == API.AuthorizeUser { AIMobileLib.getAccessTokenForScopes(["profile"], withOverrideParams: nil, delegate: self) } else if apiResult.api == API.GetAccessToken { credentialsProvider.logins = [AWSCognitoLoginProviderKey.LoginWithAmazon.rawValue: apiResult.result] } }

搭配 Amazon 使用登入: JavaScript

使用者以 Login with Amazon 進行驗證,並重新導向回您的網站之後,查詢字串中會提供 Login with Amazon access_token。請將該權杖傳遞至登入資料登入對應中。

AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { 'www.amazon.com': 'Amazon Access Token' } });

使用 Login with Amazon:Xamarin

適用於 Android 的 Xamarin

AmazonAuthorizationManager manager = new AmazonAuthorizationManager(this, Bundle.Empty); var tokenListener = new APIListener { Success = response => { // Get the auth token var token = response.GetString(AuthzConstants.BUNDLE_KEY.Token.Val); credentials.AddLogin("www.amazon.com", token); } }; // Try and get existing login manager.GetToken(new[] { "profile" }, tokenListener);

適用於 iOS 的 Xamarin

AppDelegate.cs 中,插入下列內容:

public override bool OpenUrl (UIApplication application, NSUrl url, string sourceApplication, NSObject annotation) { // Pass on the url to the SDK to parse authorization code from the url bool isValidRedirectSignInURL = AIMobileLib.HandleOpenUrl (url, sourceApplication); if(!isValidRedirectSignInURL) return false; // App may also want to handle url return true; }

ViewController.cs 中,執行下列操作:

public override void ViewDidLoad () { base.LoadView (); // Here we create the Amazon Login Button btnLogin = UIButton.FromType (UIButtonType.RoundedRect); btnLogin.Frame = new RectangleF (55, 206, 209, 48); btnLogin.SetTitle ("Login using Amazon", UIControlState.Normal); btnLogin.TouchUpInside += (sender, e) => { AIMobileLib.AuthorizeUser (new [] { "profile"}, new AMZNAuthorizationDelegate ()); }; View.AddSubview (btnLogin); } // Class that handles Authentication Success/Failure public class AMZNAuthorizationDelegate : AIAuthenticationDelegate { public override void RequestDidSucceed(ApiResult apiResult) { // Your code after the user authorizes application for requested scopes var token = apiResult["access_token"]; credentials.AddLogin("www.amazon.com",token); } public override void RequestDidFail(ApiError errorResponse) { // Your code when the authorization fails InvokeOnMainThread(() => new UIAlertView("User Authorization Failed", errorResponse.Error.Message, null, "Ok", null).Show()); } }