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

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

在创建用户池后,您可以配置一个应用程序客户端,以便使用内置网页来注册和登录用户。For terminology, see App Client Settings Terminology.

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

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

  3. 从列表中选择一个现有用户池,或创建一个用户池

  4. 在页面左侧的导航栏上,选择 General settings(常规设置)下的 App clients(应用程序客户端)。

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

  6. 输入您的应用程序名称。

  7. 除非您的授权流程有要求,否则应清除选项Generate client secret(生成客户端密钥)。客户端密钥由具有以下特点的应用程序使用:拥有可保护客户端密钥的服务器端组件。

  8. (可选)更改令牌过期设置。

  9. 选择 Auth Flows Configuration(身份验证流配置)选项。有关更多信息,请参阅用户池身份验证流程

  10. 选择 Security configuration(安全配置)。我们建议您选择 Enabled (已启用)

  11. (可选)选择 Set attribute read and write permissions (设置属性读取和写入权限)

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

  13. 记下 App client id(应用程序客户端 ID)。

  14. 选择 Return to pool details(返回池详细信息)。

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

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

  3. 从列表中选择一个现有用户池,或创建一个用户池

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

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

  6. 选择 App type(应用程序类型):Public client(公有客户端)、Confidential client(机密客户端),或者 Other(其它)。Public client(公有客户端)通常在用户的设备上运行,并使用未经身份验证和令牌身份验证的 API。Confidential client(机密客户端)通常在您通过客户端密钥和 API 凭证信任的中央服务器上的应用程序运行,并使用授权标头和 Amazon Identity and Access Management 凭证对请求进行签名。如果您的使用案例与预配置的应用程序的 Public client(公有客户端)或 Confidential client(机密客户端)应用程序设置不同,请选择 Other(其它)。

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

  8. 选择您希望在应用程序客户端中允许的 Authentication flows(身份验证流程)。有关更多信息,请参阅用户池身份验证流程

  9. 配置 Authentication flow session duration(身份验证流程会话持续时间)。这是您的用户在会话令牌过期之前必须完成每个身份验证质询的时间。

  10. (可选)配置令牌的到期时间。

    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 当前固定在一小时。

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

  12. 是否为此应用程序客户端选择 Enable token revocation(启用令牌撤消)。这将增加 Amazon Cognito 发出的令牌的大小。有关更多信息,请参阅撤消令牌

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

  14. (可选)为此应用程序客户端配置 Attribute read and write permissions(属性读取和写入权限)。您的应用程序客户端具有仅读取和写入用户池属性架构的有限子集的权限。有关更多信息,请参阅属性权限和范围

  15. 选择 Create(创建)。

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

您可以使用 Amazon CLI 创建、更新、描述和删除您的用户池应用程序客户端。

在这些示例中,将您的用户池和应用程序客户端 ID 值替换为“MyUserPoolID”和“MyAppClientID”。同样,您的参数值可能不同于这些示例中使用的值。

注意

回调和注销 URL 采用 JSON 格式,以防止 CLI 将它们视为远程参数文件:

--callback-urls "["https://example.com"]"

--logout-urls "["https://example.com"]"

更新用户池应用程序客户端(Amazon CLI 和 Amazon API)

在 Amazon CLI 中,输入以下命令:

aws cognito-idp update-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID" --allowed-o-auth-flows-user-pool-client --allowed-o-auth-flows "code" "implicit" --allowed-o-auth-scopes "openid" --callback-urls "["https://example.com"]" --supported-identity-providers "["MySAMLIdP", "LoginWithAmazon"]"

如果命令成功,则 Amazon CLI 会返回确认:

{ "UserPoolClient": { "ClientId": "MyClientID", "SupportedIdentityProviders": [ "LoginWithAmazon", "MySAMLIdP" ], "CallbackURLs": [ "https://example.com" ], "AllowedOAuthScopes": [ "openid" ], "ClientName": "Example", "AllowedOAuthFlows": [ "implicit", "code" ], "RefreshTokenValidity": 30, "AuthSessionValidity": 3, "CreationDate": 1524628110.29, "AllowedOAuthFlowsUserPoolClient": true, "UserPoolId": "MyUserPoolID", "LastModifiedDate": 1530055177.553 } }

请参阅 Amazon CLI 命令参考了解更多信息:update-user-pool-client

Amazon API:UpdateUserPoolClient

创建用户池应用程序客户端(Amazon CLI 和 Amazon API)

aws cognito-idp create-user-pool-client --user-pool-id MyUserPoolID --client-name myApp

请参阅 Amazon CLI 命令参考了解更多信息:create-user-pool-client

Amazon API:CreateUserPoolClient

获取有关用户池应用程序客户端的信息(Amazon CLI 和 Amazon API)

aws cognito-idp describe-user-pool-client --user-pool-id MyUserPoolID --client-id MyClientID

请参阅 Amazon CLI 命令参考了解更多信息:describe-user-pool-client

Amazon API:DescribeUserPoolClient

列出一个用户池中所有应用程序客户端的信息(Amazon CLI 和 Amazon API)

aws cognito-idp list-user-pool-clients --user-pool-id "MyUserPoolID" --max-results 3

请参阅 Amazon CLI 命令参考了解更多信息:list-user-pool-clients

Amazon API:ListUserPoolClients

删除用户池应用程序客户端(Amazon CLI 和 Amazon API)

aws cognito-idp delete-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID"

请参阅 Amazon CLI 命令参考了解更多信息:delete-user-pool-client

Amazon API:DeleteUserPoolClient

应用程序客户端设置术语

以下术语和定义可帮助您配置应用程序客户端。

启用身份提供商

您可以选择身份提供商(IdP)来对用户进行身份验证。该服务可以由您的用户池或第三方(如 Facebook)来执行。要使用 IdP,您需要先启用它。您可以启用多个 IdP,但必须至少启用一个。有关使用外部 IdP 的更多信息,请参阅通过第三方添加用户池登录

回调 URL

回调 URL 指示在用户成功登录之后将被重新导向到哪里。选择至少一个回调 URL。回调 URL 必须:

  • 是绝对 URI。

  • 已预先向客户端注册。

  • 不包含片段组件。

请参阅 OAuth 2.0 – 重新导向端点

Amazon Cognito 要求使用 HTTPS 而不是 HTTP,但 http://localhost(仅用于测试目的)除外。

应用程序回调 URL(如 myapp://example)也受支持。

注销 URL

注销 URL 指示在您的用户注销后会被重定向到哪里。

允许的 OAuth 流程

Authorization code grant (授权代码授予) 流启动代码授予流,这会提供授权代码作为响应。此代码可用来与令牌端点交换访问令牌。由于令牌绝不会直接向终端用户公开,因此它们不太可能被泄露。但是,后端需要自定义应用程序以将授权代码换成用户池令牌。

注意

出于安全原因,对于移动应用程序,强烈建议您仅将授权代码授予流程与 PKCE 一起使用。

Implicit grant(隐式授予)流允许客户端直接从对端点授权获取访问令牌(根据范围,可选择获取 ID 令牌)。如果您的应用程序无法启动 Authorization code grant(授权代码授予)流,请选择此流。有关更多信息,请参阅 OAuth 2.0 规范

您可以同时激活 Authorization code grant(授权代码授予)和 Implicit code grant(隐式代码授予),然后按需使用每个授予。

Client credentials (客户端凭证) 流在机器到机器的通信中使用。您可以使用此流来请求访问令牌,从而访问自己的资源。当您的应用程序代表自己而不是代表用户来请求令牌时,选择此流。

注意

由于您没有以用户身份调用客户端凭证流程,因此只能使用此流程填充访问令牌的自定义范围。自定义范围就是您为自己的资源服务器定义的范围。请参阅为您的用户池定义资源服务器

允许的 OAuth 范围

选择以下一个或多个 OAuth 范围来指定可以为访问令牌请求的访问权限。

  • phone 范围授予对 phone_numberphone_number_verified 声明的访问权限。此范围只能通过 openid 范围来请求。

  • email 范围授予对 emailemail_verified 声明的访问权限。此范围只能通过 openid 范围来请求。

  • openid 范围声明您要检索与 OpenID Connect 规范一致的范围。除非您请求 openid 范围,否则 Amazon Cognito 不会返回 ID 令牌。

  • aws.cognito.signin.user.admin 范围授予对需要访问令牌的 Amazon Cognito 用户池 API 操作的访问权限,例如 UpdateUserAttributesVerifyUserAttribute

  • profile 范围授予对客户端可读取的所有用户属性的访问权限。此范围只能通过 openid 范围来请求。

允许的自定义范围

自定义范围是您在 Resource Servers (资源服务器) 中为自己的资源服务器定义的范围。格式为:资源-服务器-标识符/范围。请参阅为您的用户池定义资源服务器

有关 OAuth 范围的更多信息,请参阅标准 OIDC 范围列表。