将 Login with Amazon 设置为身份池 IdP - Amazon Cognito

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Login with Amazon 设置为身份池 IdP

Amazon Cognito 与 Login with Amazon(使用亚马逊账号登录)集成,以针对移动应用程序和 Web 应用程序用户提供联合身份验证。本部分介绍如何使用 Login with Amazon(使用亚马逊账号登录)作为身份提供商 (IdP) 来注册和设置应用程序。

开发人员门户中设置 Login with Amazon(使用亚马逊账号登录)用于 Amazon Cognito。有关更多信息,请参阅 Login with Amazon(使用亚马逊账号登录)常见问题中的设置 Login with Amazon(使用亚马逊账号登录)

注意

要将 Login with Amazon(使用亚马逊账号登录)集成到 Xamarin 应用程序中,请按照 Xamarin 入门指南中的说明操作。

注意

您无法在 Unity 平台上原生集成 Login with Amazon(使用亚马逊账号登录)。请使用 Web 视图并完成浏览器登录流程。

设置 Login with Amazon(使用亚马逊账号登录)

实施 Login with Amazon(使用亚马逊账号登录)

Amazon 开发人员门户中,您可以设置 OAuth 应用程序以便与您的身份池集成,查找 Login with Amazon(使用亚马逊账号登录)文档并下载开发工具包。选择 Developer console(开发人员控制台),然后在开发人员门户中选择 Login with Amazon(使用亚马逊账号登录)。您可以为您的应用程序创建一个安全配置文件,然后在您的应用程序中构建 Login with Amazon(使用亚马逊账号登录)身份验证机制。请参阅获取凭证,了解有关如何将 Login with Amazon(使用亚马逊账号登录)身份验证与应用程序集成的更多信息

Amazon 针对您的新安全配置文件发布 OAuth 2.0 client ID(客户端 ID)。您可以在安全配置文件的 Web Settings(Web 设置)选项卡上找到 client ID(客户端 ID)。在您身份池中的“通过 Amazon 登录”IdP 的应用程序 ID 字段中输入安全配置文件 ID

注意

在您身份池中的“通过 Amazon 登录”IdP 的应用程序 ID 字段中输入安全配置文件 ID。这与使用客户端 ID 的用户群体不同。

在 Amazon Cognito 控制台中配置外部提供商

添加 Login with Amazon 身份提供者(IdP)
  1. Amazon Cognito 控制台中选择身份池。选择身份池。

  2. 选择用户访问选项卡。

  3. 选择添加身份提供者

  4. 选择 Login with Amazon

  5. 输入您在 Login with 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

对亚马逊登录进行身份验证后,您可以通过界面的 onSuccess 方法将令牌传递给 Amazon Cognito 凭证提供商。 TokenListener 代码如下所示:

@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

对亚马逊登录进行身份验证后,您可以使用 AMZN 的 requestDidSucceed 方法将令牌传递给 Amazon Cognito 凭证提供商:AccessTokenDelegate

- (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] } }

使用 Login with 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

Xamarin for Android

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);

Xamarin for iOS

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()); } }