View a markdown version of this page

更新用户池和应用程序客户端配置 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

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

更新用户池和应用程序客户端配置

当您想要更改用户池或应用程序客户端中的设置时,只需点击几下即可在 Amazon Cognito 控制台中应用更新。浏览用户池设置中基于特征的选项卡,并按照本指南其他部分的说明更新字段。

许多组织通过编程方式管理其资源 Amazon CloudFormation、基于 Amazon SDK 或 CDK 构建的应用程序以及其他自动化软件。如果这是您的资源管理模型,则在资源中逐步实施变更时必须格外小心。

API 操作 UpdateUserPool UpdateUserPoolClient并更新现有用户池或应用程序客户端。每个操作在 API 参考中都有一个警告:如果您没有为属性提供值,Amazon Cognito 会将其设置为默认值。当您提交仅包含一个参数的更新请求时,Amazon Cognito 会将该参数设置为您选择的值,并将所有其他参数设置为默认值。这样可以重置配置,包括您的属性架构、Lambda 触发器以及电子邮件和短信消息配置。

此外,在创建用户池或应用程序客户端后,有些设置会锁定,除非创建新资源,否则无法更改这些设置。

无法更改的设置

创建用户池后,您无法更改一些设置。如果您想要更改以下设置,您必须创建新的用户池或应用程序客户端。

注意

以前,您无法更改用户池的名称。这一点已经改变。现在,您可以为用户池分配新的友好名称。

用户池 ID

API 参数名称:Id/UserPoolId

用户池 ID(例如 us-east-1_EXAMPLE)由 Amazon Cognito 自动生成,无法更改。

Amazon Cognito 用户池登录选项

API 参数名称:AliasAttributes和 UsernameAttributes

您的用户在登录时可以作为用户名传递的属性。创建用户池时,您可以选择允许使用用户名、电子邮件地址、电话号码或首选用户名登录。要更改用户池登录选项,请创建新的用户池。

Make user name case sensitive(使用户名区分大小写)

API 参数名称:UsernameConfiguration

当您创建的用户名与除字母大小写之外的其他用户名相匹配时,Amazon Cognito 可以将其视为同一个用户或唯一用户。有关更多信息,请参阅 用户池区分大小写。要更改区分大小写,请创建新的用户池。

客户端密钥

API 参数名称:GenerateSecret

创建应用程序客户端时,可以生成客户端密钥,以便只有受信任的来源才能向用户池发出请求。有关更多信息,请参阅 Application-specific 使用应用程序客户端进行设置。要更改客户端密钥,请在同一用户池中创建新的应用程序客户端。

必需的属性

API 参数名称:Schema

当用户注册时或当您创建属性时,用户必须为这些属性提供值。有关更多信息,请参阅 使用用户属性。要更改必需的属性,请创建新的用户池。

自定义属性(删除)

API 参数名称:Schema

具有自定义名称的属性。您可以更改用户自定义属性的值,但不能从用户池中删除自定义属性。有关更多信息,请参阅 使用用户属性。如果达到自定义属性的最大数量并且您想要修改列表,请创建新的用户池。

短信配置

激活用户池中的短信后,您就无法停用它们。

  • 如果您选择在创建用户池时配置短信,则在完成设置后无法停用短信。

  • 您可以在自己创建的用户池中激活短信,但之后就无法停用短信。

  • Amazon Cognito 可以使用短信进行用户账户邀请和恢复、属性验证和多重身份验证(MFA)。激活短信后,您可以随时为这些功能开启或关闭短信。

  • 短信配置包括您委托给 Amazon Cognito 的 IAM 角色,以便使用 Amazon SNS 发送消息。您可以随时更改分配的角色。

使用更新用户池 Amazon SDK, Amazon CDK,或 REST API

在 Amazon Cognito 控制台中,您可以更改用户池设置,一次更改一个参数。例如,要添加 Lambda 触发器,您可以选择添加 Lambda 触发器,然后选择函数和触发器类型。Amazon Cognito 用户池 API 按以下方式进行构造,用户池和应用程序客户端的更新操作需要用户池的完整参数集。但是,控制台会使用您的其他用户池设置透明地自动执行此更新操作。

有时你可能会发现,当更新与你要更改的设置无关时,你 Amazon Web Services 账户 可能会发现其他地方的更改可能会导致更新生成错误。例如,已删除的 Amazon SES 身份或 IAM 权限的 Amazon WAF更改。如果其中一个当前参数不再有效,则在修复该参数之前,您无法更新设置。遇到此类错误时,请检查错误响应并验证响应中提及的设置。

Amazon Cloud Development Kit (Amazon CDK)、Amazon Cognito 用户池 REST API 和 Amazon SDK 是用于 Amazon Cognito 资源的自动化和编程配置的工具。使用这些工具的请求也必须像 Amazon Cognito 控制台一样,在请求正文中使用完整的资源配置来更新设置。概括来说,您必须执行以下步骤。

  1. 从描述现有资源配置的操作中捕获输出。

  2. 设置更改后修改输出。

  3. 在更新资源的操作中发送修改后的配置。

以下过程使用 UpdateUserPoolAPI 操作更新您的配置。同样的方法适用于不同的输入字段 UpdateUserPoolClient。

重要

如果您未为现有参数提供值,Amazon Cognito 将它们设置为默认值。例如,如果您有现有的 LambdaConfig,然后提交具有空 LambdaConfig 的 UpdateUserPool,则会删除为用户池触发器分配的所有 Lambda 函数。当您想自动更改用户池配置时,请相应地进行规划。

  1. 使用捕获用户池的现有状态 DescribeUserPool。

  2. 设置 DescribeUserPool 的输出的格式以与 UpdateUserPool 的请求参数匹配。从输出 JSON 中删除以下顶级字段及其子对象。

    • Arn

    • CreationDate

    • CustomDomain

    • Domain

    • EmailConfigurationFailure

    • EstimatedNumberOfUsers

    • Id

    • LastModifiedDate

    • Name

    • SchemaAttributes

    • SmsConfigurationFailure

    • Status

  3. 确认生成的 JSON 与 UpdateUserPool 的请求参数匹配。

  4. 修改任何您想要在生成的 JSON 中更改的参数。

  5. 提交 UpdateUserPool API 请求,同时将您修改后的 JSON 作为请求输入。

您还可以在 Amazon CLI中,在 update-user-pool 的 --cli-input-json 参数中使用这一修改后的 DescribeUserPool 输出。

或者,运行以下 Amazon CLI 命令为接受的输入字段生成空值的 JSON。update-user-pool然后,您可以使用用户池中的现有值填充这些字段。

aws cognito-idp update-user-pool --generate-cli-skeleton --output json

运行以下命令以为应用程序客户端生成相同的 JSON 对象。

aws cognito-idp update-user-pool-client --generate-cli-skeleton --output json