

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

# 设置 Login with Amazon 作为身份池 IdP
<a name="amazon"></a>

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

在[开发人员门户](https://developer.amazon.com/login-with-amazon)中设置 Login with Amazon（使用亚马逊账号登录）用于 Amazon Cognito。有关更多信息，请参阅 Login with Amazon（使用亚马逊账号登录）常见问题中的[设置 Login with Amazon（使用亚马逊账号登录）](https://developer.amazon.com/docs/login-with-amazon/faq.html#setting-up-login-with-amazon)。

**注意**  
要将 Login with Amazon（使用亚马逊账号登录）集成到 Xamarin 应用程序中，请按照 [Xamarin 入门指南](https://developer.xamarin.com/guides/cross-platform/getting_started/)中的说明操作。

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

## 设置 Login with Amazon（使用亚马逊账号登录）
<a name="login-with-amazon-setup"></a>

**实施 Login with Amazon（使用亚马逊账号登录）**

在[亚马逊开发者门户](https://developer.amazon.com/apps-and-games/login-with-amazon)中，您可以设置 OAuth 应用程序以与您的身份池集成，查找 Login with Amazon 文档，然后下载 SDKs。选择 **Developer console**（开发人员控制台），然后在开发人员门户中选择 **Login with Amazon**（使用亚马逊账号登录）。您可以为您的应用程序创建一个安全配置文件，然后在您的应用程序中构建 Login with Amazon（使用亚马逊账号登录）身份验证机制。请参阅[获取凭证](getting-credentials.md)，了解有关如何将 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 控制台中配置外部提供商
<a name="login-with-amazon-configure-provider"></a>

**添加 Login with Amazon 身份提供者（IdP）**

1. 从 [Amazon Cognito 控制台](https://console.aws.amazon.com/cognito/home)中选择**身份池**。选择身份池。

1. 选择**用户访问**选项卡。

1. 选择**添加身份提供者**。

1. 选择 **Login with Amazon**。

1. 输入您在 Lo [gin with Amazon 上创建的 OAuth ](https://developer.amazon.com/apps-and-games/login-with-amazon)项目的**应用程序 ID**。有关更多信息，请参阅 [Login with Amazon 文档](https://developer.amazon.com/docs/login-with-amazon/documentation-overview.html)。

1. 要设置 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时请求的角色，请配置**角色设置**。

   1. 您可以为该 IdP 中的用户分配您在配置**经过身份验证的角色**时设置的**原定设置角色**，也可以**使用规则选择角色**。

     1. 如果您选择**使用规则选择角色**，请输入用户身份验证中的来源**声明**、您要用来与声明进行比较的**运算符**、导致与该角色选择匹配的**值**，以及当**角色分配**匹配时要分配的**角色**。选择**添加其他**，以根据不同的条件创建其他规则。

     1. 选择**角色解析**。当用户的声明与您的规则不匹配时，您可以拒绝凭证或为**经过身份验证的角色**颁发凭证。

1. 要更改 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时分配的主体标签，请配置**访问控制属性**。

   1. 如果不应用主体标签，请选择**非活动**。

   1. 要基于 `sub` 和 `aud` 声明应用主体标签，请选择**使用原定设置映射**。

   1. 要为主体标签创建自己的自定义属性模式，请选择**使用自定义映射**。然后，对于您要在标签中表示的每个**声明**，输入要从该声明中获取的**标签键**。

1. 选择**保存更改**。

## 使用 Login with Amazon：Android
<a name="set-up-amazon-1.android"></a>

对亚马逊登录进行身份验证后，您可以通过界面的 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
<a name="set-up-amazon-1.ios-objc"></a>

对亚马逊登录进行身份验证后，您可以通过以下 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
<a name="set-up-amazon-1.ios-swift"></a>

在对 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
<a name="set-up-amazon-1.javascript"></a>

在用户通过 Login with Amazon 进行身份验证并重定向回网站后，系统会在查询字符串中提供 Login with Amazon access\$1token。将此令牌传递到凭证登录映射。

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