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

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

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

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

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

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

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

无法更改的设置

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

注意

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

用户池 ID

API 参数名称:ID/ UserPoolId

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

Amazon Cognito 用户群体登录选项

API 参数名称:AliasAttributesUsernameAttributes

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

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

API 参数名称:UsernameConfiguration

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

客户端密钥

API 参数名称:GenerateSecret

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

必需的属性

API 参数名称:Schema

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

自定义属性(删除)

API 参数名称:Schema

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

短信配置

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

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

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

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

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

使用 AWS SDK 或 REST API 更新用户池 AWS CDK

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

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

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

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

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

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

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

重要

如果您未为现有参数提供值,Amazon Cognito 将它们设置为默认值。例如,如果您有现有的 LambdaConfig,然后提交具有空 LambdaConfigUpdateUserPool,则会删除为用户群体触发器分配的所有 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 作为请求输入。

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

或者,运行以下 AWS 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