将联合用户与现有用户配置文件关联 - Amazon Cognito

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

将联合用户与现有用户配置文件关联

通常,同一个用户的个人资料包含多个身份提供商 (IdPs),您已将其连接到您的用户池。Amazon Cognito 可以将用户的每次出现与目录中的同一个用户配置文件关联。这样,一个拥有多个 IdP 用户的人可以在您的应用程序中获得一致的体验。AdminLinkProviderForUser让 Amazon Cognito 将您的联合目录中用户的唯一 ID 识别为用户池中的用户。如果您有零个或多个与用户个人资料关联的联合身份,则出于计费目的,您的用户池中的用户算作一个月活跃用户 (MAU)。

当联合用户首次登录您的用户群体时,Amazon Cognito 会查找您已关联到其身份的本地个人资料。如果不存在关联的个人资料,则您的用户群体会创建一个新的个人资料。您可以创建本地个人资料并在您的联合用户首次登录之前的任何时候通过AdminLinkProviderForUserAPI请求将其链接到他们,无论是在计划的预配置任务中还是在计划中的预配置任务中,还是在中。注册前 Lambda 触发器在您的用户登录且 Amazon Cognito 检测到关联的本地个人资料后,您的用户群体会读取用户的声明,并将其与 IdP 的映射规则进行比较。然后,您的用户群体会使用他们登录时映射的声明来更新关联的本地个人资料。通过这种方式,您可以为本地配置文件配置访问权限声明,并将其身份声明保留给您的 up-to-date 提供商。在 Amazon Cognito 将您的联合用户与关联的个人资料匹配后,他们将始终登录该个人资料。然后,您可以将用户的更多提供者身份关联到同一个人资料,从而为一位客户提供一致的应用体验。要关联之前登录过的联合用户,必须先删除其现有个人资料。您可以通过其格式识别现有个人资料:[Provider name]_identifier。例如,LoginWithAmazon_amzn1.account.AFAEXAMPLE。您创建并关联到第三方用户身份的用户具有创建时使用的用户名和包含其关联身份详细信息的identities属性。

重要

由于AdminLinkProviderForUser允许具有外部联合身份的用户以用户池中的现有用户身份登录,因此必须仅将其与应用程序所有者信任的外部 IdPs 和提供者属性一起使用。

例如,如果您是一家托管服务提供商 (MSP),其应用程序与多个客户共享。每位客户都通过 Active Directory 联合身份验证服务(ADFS)登录您的应用程序。您的 IT 管理员 Carlos 在每个客户的域中都有一个账户。您希望 Carlos 在每次登录时都能被识别为应用程序管理员,而不考虑 IdP。

你ADFS IdPs 在 Carlos 向 Amazon Cognito email 提出的主张msp_carlos@example.com中提供的电子邮件地址SAML。您使用用户名 Carlos 在用户群体中创建一个用户。以下 AWS Command Line Interface (AWS CLI) 命令将来自 IdPs ADFS1、ADFS2和 Carlos 的身份链接起来。ADFS3

注意

您可以根据特定属性声明关联用户。这种能力是OIDC和所独有的SAML IdPs。对于其他提供者类型,您必须基于固定来源属性来进行关联。有关更多信息,请参阅AdminLinkProviderForUser。当您将社交 IdP 与用户配置文件关联时,必须将 ProviderAttributeName 设置为 Cognito_SubjectProviderAttributeValue 必须是用户在 IdP 中的唯一标识符。

aws cognito-idp admin-link-provider-for-user \ --user-pool-id us-east-1_EXAMPLE \ --destination-user ProviderAttributeValue=Carlos,ProviderName=Cognito \ --source-user ProviderName=ADFS1,ProviderAttributeName=email,ProviderAttributeValue=msp_carlos@example.com aws cognito-idp admin-link-provider-for-user \ --user-pool-id us-east-1_EXAMPLE \ --destination-user ProviderAttributeValue=Carlos,ProviderName=Cognito \ --source-user ProviderName=ADFS2,ProviderAttributeName=email,ProviderAttributeValue=msp_carlos@example.com aws cognito-idp admin-link-provider-for-user \ --user-pool-id us-east-1_EXAMPLE \ --destination-user ProviderAttributeValue=Carlos,ProviderName=Cognito \ --source-user ProviderName=ADFS3,ProviderAttributeName=email,ProviderAttributeValue=msp_carlos@example.com

用户群体中的用户配置文件 Carlos 现在具有以下 identities 属性。

[{ "userId": "msp_carlos@example.com", "providerName": "ADFS1", "providerType": "SAML", "issuer": "http://auth.example.com", "primary": false, "dateCreated": 111111111111111 }, { "userId": "msp_carlos@example.com", "providerName": "ADFS2", "providerType": "SAML", "issuer": "http://auth2.example.com", "primary": false, "dateCreated": 111111111111111 }, { "userId": "msp_carlos@example.com", "providerName": "ADFS3", "providerType": "SAML", "issuer": "http://auth3.example.com", "primary": false, "dateCreated": 111111111111111 }]
有关关联联合用户需了解的事项
  • 您最多可以将五个联合用户与每个用户配置文件关联。

  • 根据请求中的ProviderAttributeName参数的定义,您最多可以将五个 IdP 属性声明中的用户链接到每个 IdP。SourceUser AdminLinkProviderForUser API例如,如果您已将至少一个用户链接到源属性email、、phonedepartmentgiven_namelocation、和,则只能在这五个属性中的一个上关联其他用户。

  • 您可以将联合用户与现有联合用户配置文件或本地用户关联。

  • 您无法在中将提供商链接到用户个人资料 AWS Management Console。

  • 您的用户 ID 令牌在 identities 声明中含包所有关联的提供者。

  • 您可以在请求中为自动创建的联合用户配置文件设置密码。AdminSetUserPasswordAPI然后,该用户的状态从 EXTERNAL_PROVIDER 更改为 CONFIRMED。处于此状态的用户可以以联合用户身份登录,并像关联的本地用户API一样启动身份验证流程。他们还可以在经过令牌验证的API请求(如和)中修改其密码和属性。ChangePasswordUpdateUserAttributes作为最佳安全实践,为了让用户与您的外部 IdP 保持同步,请勿在联合用户配置文件上设置密码。相反,使用 AdminLinkProviderForUser 将用户与本地配置文件关联。

  • 当用户通过 IdP 进行登录时,Amazon Cognito 会将用户属性填充到关联的本地用户配置文件中。Amazon Cognito 处理来自身份提供商的 ID 令牌中的身份声明,还会检查 2.0 和提供商的userInfo终端节点。OIDC OAuth OIDCAmazon Cognito 将 ID 令牌中的信息优先级置于来自 userInfo 的信息之上。

当您得知用户不再使用您已关联到其个人资料的外部用户账户时,您可以取消该用户账户与您的用户群体用户的关联。当您关联用户时,您会在请求中提供用户的属性名称、属性值和提供者名称。要删除用户不再需要的配置文件,AdminDisableProviderForUserAPI请使用等效参数进行请求。

AdminLinkProviderForUser有关其他命令语法和示例,请参见 AWS SDKs。