本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Login with Amazon 设置为身份池 IdP
Amazon Cognito 身份池与 Login with Amazon 配合使用,为您的移动和网络应用程序用户提供联合身份验证。本部分介绍如何使用 Login with Amazon(使用亚马逊账号登录)作为身份提供商 (IdP) 来注册和设置应用程序。
在开发人员门户
注意
要将 Login with Amazon(使用亚马逊账号登录)集成到 Xamarin 应用程序中,请按照 Xamarin 入门指南
注意
您无法在 Unity 平台上原生集成 Login with Amazon(使用亚马逊账号登录)。请使用 Web 视图并完成浏览器登录流程。
设置 Login with Amazon(使用亚马逊账号登录)
实施 Login with Amazon(使用亚马逊账号登录)
在亚马逊开发者门户
Amazon 会为您的新安全配置文件发放 OAuth 2.0 客户端 ID。您可以在安全配置文件的 Web Settings(Web 设置)选项卡上找到 client ID(客户端 ID)。在您身份池中的“通过 Amazon 登录”IdP 的应用程序 ID 字段中输入安全配置文件 ID。
注意
在您身份池中的“通过 Amazon 登录”IdP 的应用程序 ID 字段中输入安全配置文件 ID。这与使用客户端 ID 的用户群体不同。
在 Amazon Cognito 控制台中配置外部提供商
添加 Login with Amazon 身份提供者(IdP)
-
从 Amazon Cognito 控制台
中选择身份池。选择身份池。 -
选择用户访问选项卡。
-
选择添加身份提供者。
-
选择 Login with Amazon。
-
输入您在 Lo gin with Amazon 上创建的OAuth
项目的应用程序 ID。有关更多信息,请参阅 Login with Amazon 文档 。 -
要设置 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时请求的角色,请配置角色设置。
-
您可以为该 IdP 中的用户分配您在配置经过身份验证的角色时设置的原定设置角色,也可以使用规则选择角色。
-
如果您选择使用规则选择角色,请输入用户身份验证中的来源声明、您要用来比较声明的运算符、导致与该角色选择匹配的值,以及当角色分配匹配时要分配的角色。选择添加其他,以根据不同的条件创建其他规则。
-
选择角色解析。当用户的声明与您的规则不匹配时,您可以拒绝凭证或为经过身份验证的角色颁发凭证。
-
-
-
要更改 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时分配的主体标签,请配置访问控制属性。
-
如果不应用主体标签,请选择非活动。
-
要基于
sub
和aud
声明应用主体标签,请选择使用原定设置映射。 -
要为主体标签创建自己的自定义属性模式,请选择使用自定义映射。然后,对于您要在标签中表示的每个声明,输入要从该声明中获取的标签键。
-
-
选择保存更改。
使用 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
对亚马逊登录进行身份验证后,您可以通过以下 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 登录进行身份验证后,您可以在 AMZNAccessTokenDelegate
的 requestDidSucceed
方法中将令牌传递给 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()); } }