指定适用于用户池的身份提供商属性映射
您可以使用 Amazon Web Services Management Console、Amazon CLI 或 API 来指定用户池的身份提供商 (IdP) 的属性映射。
有关映射的需知信息
在使用映射之前,请查看下面重要的详细信息:
-
当联合用户登录到您的应用程序时,您的用户群体需要的每个用户群体属性都必须存在一个映射。例如,如果您的用户群体需要
email
属性来进行注册,则将此属性映射到 IdP 中的对等属性。 -
默认情况下,映射的电子邮件地址未经验证。您无法使用一次性代码验证映射的电子邮件地址。而是要映射 IdP 的属性来获取验证状态。例如,Google 和大多数 OIDC 提供商都包含
email_verified
属性。 -
对于每个映射的用户池属性,最大值长度(2048 个字符)必须足够大,才能容纳 Amazon Cognito 从 IdP 处获取的值。否则,当用户登录到您的应用程序时,Amazon Cognito 会报告错误。如果您将自定义属性映射到 IdP 令牌,请将长度设置为 2048 个字符。
-
Amazon Cognito 从联合 IdP 传递的特定声明中派生出联合用户配置文件中的
username
属性,如下所示。Amazon Cognito 在此属性值前面加上 IdP 的名称。当您希望联合用户拥有与第三方目录中的属性完全匹配的属性时,请将该属性映射到另一个 Amazon Cognito 属性,如preferred_username
。身份提供商 username
资源属性Facebook id
Google sub
Login with Amazon user_id
Sign in with Apple sub
SAML 提供商 NameID
OpenID Connect (OIDC) 提供商 sub
-
当用户登录您的应用程序时,Amazon Cognito 必须能够更新映射的用户池属性。用户通过某个 IdP 登录时,Amazon Cognito 将使用来自该 IdP 的最新信息更新映射的属性。Amazon Cognito 将更新每个映射的属性,即使当前值已经与最新信息匹配也会更新。如果 Amazon Cognito 无法更新属性,则会报告错误。要确保 Amazon Cognito 可以更新属性,请检查以下要求:
-
您从 IdP 映射的所有用户群体自定义属性都必须为可变的。您可以随时更新可变的自定义属性。相比之下,只有在首次创建用户配置文件时,才能为用户的不可变 自定义属性设置值。要在 Amazon Cognito 控制台中创建可变的自定义属性,请在 Sign-up experience(注册体验)选项卡中选择 Add custom attributes(添加自定义属性)时,为您添加的属性激活 Mutable(可变)复选框。或者,如果您使用 CreateUserPool API 操作创建用户池,则可将这些属性中的每个属性的
Mutable
参数设置为true
。
-
在应用程序的应用程序客户端设置中,映射的属性必须可写。您可以在 Amazon Cognito 控制台的 App clients (应用程序客户端) 页面中设置哪些属性为可写属性。或者,如果您使用
CreateUserPoolClient
API 操作创建应用程序客户端,则可以将这些属性添加到WriteAttributes
数组。
-
-
如果 IdP 属性包含多个值,Amazon Cognito URL 形式对包含非字母数字字符的值(不包括“
.
”、“-
”、“*
”和“_
”字符)进行编码。在您的应用程序中使用这些值之前,您必须解码这些值。
指定适用于用户池的身份提供商属性映射(Amazon Web Services Management Console)
您可以使用 Amazon Web Services Management Console为您的用户池的 IdP 指定属性映射。
注意
只有当陈述存在于传入令牌中时,Amazon Cognito 才会将传入陈述映射到用户池属性。如果之前映射的声明不再存在于传入令牌中,则不会被删除或更改。如果您的应用程序需要映射已删除的声明,则可以使用预身份验证 Lambda 触发器在身份验证期间删除自定义属性,并允许从传入令牌重新填充这些属性。
指定适用于用户池的身份提供商属性映射(Amazon CLI 和 Amazon API)
使用以下命令为您的用户池指定 IdP 属性映射。
在提供商创建时指定属性映射
-
Amazon CLI:
aws cognito-idp create-identity-provider
带元数据文件的示例:
aws cognito-idp create-identity-provider --user-pool-id
<user_pool_id>
--provider-name=SAML_provider_1 --provider-type SAML --provider-details file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress其中
details.json
包含:{ "MetadataFile": "
<SAML metadata XML>
" }注意
如果
<SAML metadata XML>
包含任何引号 ("
),则必须对其进行转义 (\"
)。带元数据 URL 的示例:
aws cognito-idp create-identity-provider --user-pool-id
<user_pool_id>
--provider-name=SAML_provider_1 --provider-type SAML --provider-details MetadataURL=<metadata_url>
--attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress -
Amazon API:CreateIdentityProvider
指定现有 IdP 的属性映射
-
Amazon CLI:
aws cognito-idp update-identity-provider
示例:
aws cognito-idp update-identity-provider --user-pool-id
<user_pool_id>
--provider-name<provider_name>
--attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress -
Amazon API:UpdateIdentityProvider
获取有关特定 IdP 的属性映射的信息
-
Amazon CLI:
aws cognito-idp describe-identity-provider
示例:
aws cognito-idp describe-identity-provider --user-pool-id
<user_pool_id>
--provider-name<provider_name>
-
Amazon API:DescribeIdentityProvider