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

配置用户池应用程序客户端

应用程序是用户池中的一个实体,它有权限调用未经身份验证的 API 操作。未经身份验证的 API 操作是指没有经过身份验证的用户的操作。示例包括注册、登录和处理忘记密码的操作。要调用这些 API 操作,您需要应用程序客户端 ID 和可选的客户端密钥。您有责任确保任何应用程序客户端 ID 或密钥的安全,以便只有经过授权的客户端应用程序才能调用这些未经身份验证的操作。

您可以为一个用户池创建多个应用程序。通常,一个应用程序对应一个应用程序的平台。例如,您可以为服务器端应用程序和其他 Android 应用程序创建一个应用程序。每个应用程序都有各自的应用程序客户端 ID。

在 Amazon Cognito 中创建应用程序客户端时,您可以根据标准 OAuth 客户端类型公有客户端机密客户端预填充选项。使用客户端密钥配置机密客户端

公有客户端

公有客户端在浏览器或移动设备上运行。由于它没有可信的服务器端资源,所以它没有客户端密钥。

机密客户端

机密客户端拥有可以信任的服务器端资源,使用客户端密钥进行未经身份验证的 API 操作。该应用程序可在后端服务器上作为守护进程或 Shell 脚本运行。

客户端密钥

客户端密钥是一个固定字符串,您的应用程序必须在发送到应用程序客户端的所有 API 请求中使用该字符串。您的应用程序客户端必须有客户端密钥才能执行 client_credentials 授权。

您在创建应用程序后无法更改密钥。如果要轮换密钥,您可以创建一个具备新私有密钥的新应用程序。您也可以删除应用程序,以便阻止使用该应用程序客户端 ID 的应用程序的访问。

您可以将机密客户端和客户端密钥用于公有应用程序。使用 Amazon CloudFront 代理添加传输中的 SECRET_HASH。有关更多信息,请参阅 Amazon 博客上的 Protect public clients for Amazon Cognito by using an Amazon CloudFront proxy(使用 Amazon CloudFront 代理保护 Amazon Cognito 的公共客户端)。

创建应用程序客户端(Amazon Web Services Management Console)

Original console

创建应用程序客户端(控制台)

  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。

  2. 选择 User Pools(用户池)。

  3. 从列表中选择现有用户池,或 create a user pool(创建用户池)。

  4. 选择 App integration(应用程序集成)选项卡。查找 App clients(应用程序客户端)并选择 Create an app client(创建应用程序客户端)。

  5. 选择 AAdd app client (添加应用程序客户端)

  6. 选择 Add an app client (添加应用程序客户端)

  7. 输入 App client name(应用程序客户端名称)。

  8. 指定应用程序的 Refresh token expiration(刷新令牌的到期时间)。默认值为 30 天。您可以将此默认值更改为 1 小时到 10 年之间的任何值。

  9. 指定应用程序的 Access token expiration (访问令牌的到期时间)。默认值为 1 小时。您可以将此默认值更改为 5 分钟到 24 小时之间的任何值。

  10. 指定应用程序的 ID token expiration(ID 令牌的过期时间)。默认值为 1 小时。您可以将此默认值更改为 5 分钟到 24 小时之间的任何值。

    重要

    如果您使用托管 UI 并将令牌过期时间设置为不到一小时,用户将能够根据其会话 Cookie 获取新令牌,该 Cookie 在 1 小时后过期。您无法更改此 Cookie 的持续时间。

  11. 默认情况下,用户池会为您的应用程序生成一个客户端密钥。如果您不需要客户端密钥,请清除 Generate client secret(生成客户端密钥)。

  12. 如果您的服务器应用程序需要开发人员凭证(使用签名版本 4)并且不使用安全远程密码 (SRP) 身份验证,请选择 Enable username password auth for admin APIs for authentication (ALLOW_ADMIN_USER_PASSWORD_AUTH) [启用适用于管理 API 的用户名密码授权以进行身份验证 (ALLOW_ADMIN_USER_PASSWORD_AUTH)] 以激活服务器端身份验证。有关更多信息,请参阅 管理员身份验证流程

  13. Prevent User Existence Errors (防止用户已存在错误) 下,选择 Legacy (经典)Enabled (已启用)。有关更多信息,请参阅管理错误响应

  14. 默认情况下,用户池会授予您的应用程序读取和写入所有属性的权限。如果您要为应用程序设置不同的权限,请完成以下步骤。否则,请跳至步骤 15。

    1. 选择设置属性读取和写入权限

    2. 请执行以下任一操作,设置读写权限:

      • 选择一个或多个范围。每个范围都是一组标准属性。有关更多信息,请参阅标准 OIDC 范围列表。

      • 选择单个标准或自定义属性。

    注意

    您无法删除任何应用程序中写入权限的必需属性。

  15. 选择 Create app client (创建应用程序客户端)

  16. 如果您希望创建另一个应用程序,请选择添加应用程序

  17. 创建所需的所有应用程序后,选择 Return to pool details (返回池详细信息),更新任何其他字段,然后选择 Create pool (创建池)

New console

创建应用程序客户端(控制台)

  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。

  2. 选择 User Pools(用户池)。

  3. 从列表中选择现有用户池,或 create a user pool(创建用户池)。

  4. 选择 App integration(应用程序集成)选项卡。

  5. 选择 App clients(应用程序客户端)下的 Create an app client(创建应用程序客户端)。

  6. 选择 App type(应用程序类型):Public client(公有客户端)、Confidential client(机密客户端),或者 Other(其它)。

  7. 输入 App client name(应用程序客户端名称)。

  8. 选择您希望在应用程序客户端中允许的 Authentication flows(身份验证流程)。

  9. (可选)如果您要配置令牌过期时间,请完成以下步骤:

    1. 指定应用程序客户端的 Refresh token expiration(刷新令牌的过期时间)。默认值为 30 天。您可以将其更改为 1 小时到 10 年之间的任何值。

    2. 指定应用程序客户端的 Access token expiration(访问令牌的过期时间)。默认值为 1 小时。您可以将其更改为 5 分钟到 24 小时之间的任何值。

    3. 指定应用程序客户端的 ID token expiration(ID 令牌的过期时间)。默认值为 1 小时。您可以将其更改为 5 分钟到 24 小时之间的任何值。

      重要

      如果您使用托管 UI 并将令牌生命周期配置为不到一小时,用户将能够根据其会话 Cookie 持续时间使用令牌,该 Cookie 当前固定在一小时。

  10. 选择 Generate client secret(生成客户端密钥),让 Amazon Cognito 为您生成一个客户端密钥。客户端密钥通常与机密客户端关联。

  11. 是否为此应用程序客户端选择 Enable token revocation(启用令牌撤消)。这将增加 Amazon Cognito 发出的令牌的大小。

  12. 是否为此应用程序客户端选择 Prevent error messages that reveal user existence(防止暴露用户存在的错误消息)。Amazon Cognito 将响应不存在的用户的登录请求,并显示一条指出用户名或密码不正确的通用消息。

  13. (可选)为此应用程序客户端配置 Attribute read and write permissions(属性读取和写入权限)。您的应用程序客户端有权限读取和写入用户池属性架构的有限子集。

  14. 选择创建

  15. 记下 Client id(客户端 ID)。这将识别注册和登录请求中的应用程序客户端。

在用户池中创建和更新应用程序客户端(API、Amazon CLI)

请执行下列操作之一: