Amazon Cognito
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

以 Login with Amazon 登录

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

可通过两种方法来设置 Login with Amazon,以与 Amazon Cognito 结合使用。如果您不确定使用哪一种方法,或者需要使用两种方法,请参阅 Login with Amazon 常见问题中的“设置 Login with Amazon”。

  • 通过 Amazon 开发人员门户。如果您想让最终用户通过 Login with Amazon 进行身份验证,但您没有 Seller Central 账户,请使用此方法。

  • 使用 http://login.amazon.com/ 并通过 Seller Central 设置。如果您是使用 Seller Central 的零售商,请使用此方法。

注意

对于 Xamarin,请按照 Xamarin 入门指南将 Login with Amazon 集成到 Xamarin 应用程序中。

注意

Unity 平台本身不支持 Login with Amazon 集成。目前,进行集成需要使用 Web 视图来完成浏览器登录流程。

设置 Login with Amazon

要实施 Login with Amazon,请执行以下操作之一:

  • 通过 Amazon 开发人员门户为应用程序创建安全配置文件 ID。如果您想让最终用户通过 Amazon 进行身份验证,但没有 Seller Central 账户,请使用此方法。开发人员门户 Login with Amazon 文档将指导您完成在应用程序中设置 Login with Amazon、下载客户端开发工具包及在 Amazon 开发人员平台上声明应用程序等流程。记下安全配置文件 ID,因为您将需要在创建 Amazon Cognito 身份池时输入它作为 Amazon 应用程序 ID,如获取凭证中所述。

  • 使用 http://login.amazon.com/,通过 Seller Central 为应用程序创建应用程序 ID。如果您是使用 Seller Central 的零售商,请使用此方法。Seller Central Login with Amazon 文档将指导您完成在应用程序中设置 Login with Amazon、下载客户端开发工具包及在 Amazon 开发人员平台上声明应用程序等流程。记下应用程序 ID,因为您将需要在创建 Amazon Cognito 身份池时输入它作为 Amazon 应用程序 ID,如获取凭证中所述。

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

Amazon Cognito 控制台主页

  1. 单击想要针对其启用 Login with Amazon 作为外部提供商的身份池的名称。此时将显示身份池的 Dashboard 页。

  2. Dashboard 页的右上角,单击 Edit identity pool。此时将显示“Edit identity pool”页。

  3. 向下滚动并单击 Authentication providers 以将其展开。

  4. 选择 Amazon 选项卡。

  5. 选择 Unlock

  6. 输入从 Amazon 获取的 Amazon 应用程序 ID,然后选择 Save Changes

使用 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 登录后,您可以使用 AMZNAccessTokenDelegate 的 requestDidSucceed 方法将令牌传递给 Amazon Cognito 凭证提供程序:

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