

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

# 设置 SAML 提供者作为身份池 IdP
<a name="saml-identity-provider"></a>

借助 Amazon Cognito 身份池，您可以通过 SAML 2.0 使用身份提供商 (IdPs) 对用户进行身份验证。您可以使用支持 SAML 和 Amazon Cognito 的 IdP，为用户提供简单的引导流程。您支持 SAML 的 IdP 指定了用户可以承担的 IAM 角色。这样，不同的用户可以获得不同的权限集。

## 配置 SAML IdP 身份池
<a name="configure-identity-pool-saml-provider"></a>

以下步骤介绍了如何配置身份池以使用基于 SAML 的 IdP。

**注意**  
在配置身份池以支持 SAML 提供商前，您必须先在 [IAM 控制台](https://console.aws.amazon.com/iam)中配置 SAML IdP。有关更多信息，请参阅 *IAM 用户指南*中的[将第三方 SAML 解决方案提供商与 AWS集成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml_3rd-party.html)。

**添加 SAML 身份提供者（IdP）**

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

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

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

1. 选择 **SAML**。

1. 从您 AWS 账户的 IAM 中选择一个 **SAML 身份提供商** IdPs 。如果您想添加新的 SAML 提供者，请选择**创建新的提供者**以导航到 IAM 控制台。

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

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

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

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

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

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

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

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

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

## 配置 SAML IdP
<a name="configure-your-saml-identity-provider"></a>

创建 SAML 提供程序后，配置 SAML IdP，以在 IdP 和 AWS之间添加信赖方信任。使用 man IdPs y，您可以指定一个 URL，IdP 可以使用该网址从 XML 文档中读取信赖方信息和证书。对于 AWS，你可以使用 [https://signin.aws.amazon.com/static/saml-metadata.xml](https://signin.aws.amazon.com/static/saml-metadata.xml)。下一步是配置来自 IdP 的 SAML 断言响应，以填充所需的声明。 AWS 有关申请配置的详细信息，请参阅[针对身份验证响应配置 SAML 断言](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_assertions.html)。

如果在 SAML 元数据中，您的 SAML IdP 包含多个签名证书，则在登录时，只要与 SAML 元数据中的任何证书匹配，您的身份池就会确定 SAML 断言有效。

## 使用 SAML 自定义用户角色
<a name="role-customization-saml"></a>

将 SAML 与 Amazon Cognito 身份结合使用时，可针对终端用户自定义角色。Amazon Cognito 只支持对基于 SAML 的 IdP 使用[增强流程](authentication-flow.md)。您无需为身份池指定经过身份验证或未经身份验证的角色，即可使用基于 SAML 的 IdP。`https://aws.amazon.com/SAML/Attributes/Role` 声明属性指定一个或多个逗号分隔的角色和提供商 ARN 对。这些是用户可以担任的角色。您可以配置 SAML IdP 以根据 IdP 提供的用户属性信息填充角色属性。如果您在 SAML 断言中收到多个角色，请在调用 `getCredentialsForIdentity` 时填充可选的 `customRoleArn` 参数。如果 `customRoleArn` 角色与 SAML 断言中的声明中的角色匹配，则用户将承担此角色。

## 使用 SAML IdP 对用户进行身份验证
<a name="authenticate-user-with-saml"></a>

要与基于 SAML 的 IdP 联合，请确定用户启动登录的 URL。 AWS 联盟使用 IDP 发起的登录。在 AD FS 2.0 中，URL 采用 `https://<fqdn>/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices` 格式。

要在 Amazon Cognito 中添加对 SAML IdP 的支持，请首先使用 SAML 身份提供商从 iOS 或 Android 应用程序对用户进行身份验证。您用于与 SAML IdP 集成和向其进行身份验证的代码特定于 SAML 提供商。在对用户进行身份验证后，您可以使用 Amazon Cognito APIs 向亚马逊 Cognito Identity 提供生成的 SAML 断言。

您无法在身份池 API 请求的 `Logins` 映射中重复或*重放* SAML 断言。重放的 SAML 断言的断言 ID 与早期 API 请求的 ID 重复。可以在`Logins`地图中接受 SAML 断言的 API 操作包括[GetId](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetId.html)、[GetCredentialsForIdentity[GetOpenIdToken](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdToken.html)](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html)、和。[GetOpenIDTokenForDeveloperIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html)您可以在身份池身份验证流程中对于每个 API 请求重放 SAML 断言 ID 一次。例如，您可以在 `GetId` 请求和后续 `GetCredentialsForIdentity` 请求中提供相同的 SAML 断言，但不能在第二个 `GetId` 请求中提供相同的 SAML 断言。