第 2 步 添加应用程序以启用托管 Web UI - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

第 2 步 添加应用程序以启用托管 Web UI

在创建用户池后,您可以创建一个应用程序,以便使用内置网页来对用户进行注册和登录。

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(生成客户端密钥)。由于使用具有客户端身份验证的客户端密钥(例如此练习中使用的 JavaScript)并不安全,因此不建议将其用于生产应用程序客户端。客户端密钥仅限由具有以下特点的应用程序使用:拥有可保护客户端密钥的服务器端身份验证组件。

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

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

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

  11. 从控制台页面左侧的导航栏中选择 App client settings(应用程序客户端设置)。

  12. 选择 Cognito User Pool(Cognito 用户池)作为其中一个 Enabled Identity Providers(启用的身份提供商)。

    注意

    要使用外部身份提供商(IdP)(如 Facebook、亚马逊、Google 和 Apple)以及通过 OpenID Connect(OIDC)或 SAML IdP 进行登录,请首先按下文所述的方式对它们进行配置,然后返回到 App client settings (应用程序客户端设置) 页面将其启用。

  13. 输入回调 URL,供 Amazon Cognito 授权服务器在用户通过身份验证之后进行调用。对于 Web 应用程序,URL 应以 https:// 开头,例如 https://www.example.com

    对于 iOS 或 Android 应用程序,您可以使用类似 myapp:// 的回调 URL。

  14. 输入注销 URL。

  15. 选择 Authorization code grant (授权代码授予) 以返回随后更换为用户池令牌的授权代码。由于令牌绝不会直接向终端用户公开,因此它们不太可能被泄露。但是,后端需要自定义应用程序以将授权代码换成用户池令牌。出于安全原因,对于移动应用程序,强烈建议您将授权代码授予流程与代码交换的证明密钥(PKCE)一起使用。

  16. Allowed OAuth Flows (允许的 OAuth 流程) 下,选择 Implicit grant (隐式授予) 以便从 Amazon Cognito 将用户池 JSON Web 令牌(JWT)返回给您。当没有可用于将授权代码更换为令牌的后端时,您可以使用此流程。它对于调试令牌也很有帮助。

    注意

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

  17. 除非您希望明确地排除一个允许的 OAuth 范围,否则请选中所有 Allowed OAuth scopes(允许的 OAuth 范围)的复选框。

    注意

    只有在您的应用程序需要代表自己而不是代表用户请求访问令牌时才选择 Client credentials (客户端凭证)

  18. 选择 Save changes(保存更改)。

  19. Domain name(域名)页面上,键入可用的域前缀。

  20. 记下完整的域地址。

  21. 选择 Save changes(保存更改)。

New console

在用户池中创建应用程序

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

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

  3. 从列表中选择一个现有用户池,或创建一个用户池。如果创建新的用户池,系统将在向导期间提示您设置应用程序客户端并配置托管 UI。

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

  5. 选择在 Domain(域)旁边的 Actions(操作),然后选择 Create custom domain(创建自定义域)或 Create Cognito domain(创建 Cognito 域)。如果您已配置用户池域,请先选择 Delete Cognito domain(删除 Cognito 域)或 Delete custom domain(删除自定义域),然后再创建新的自定义域。

  6. 输入可用的域前缀,将其与 Cognito domain(Cognito 域)结合使用。有关设置 Custom domain(自定义域)的信息,请参阅将您自己的域用于托管 UI

  7. 选择 Create(创建)。

  8. 导航回用于同一用户池的 App integration(应用程序集成)选项卡,然后查找 App clients(应用程序客户端)。选择 Create an app client(创建应用程序客户端)。

  9. 选择 Application type(应用程序类型)。系统将根据您的选择提供一些建议的设置。使用托管 UI 的应用程序是 Public client(公有客户端)。

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

  11. 在此练习中,选择 Don't generate client secret(不生成客户端密钥)。客户端密钥由机密应用程序使用,该应用程序由集中式应用程序对用户进行身份验证。在此练习中,您将向用户展示托管 UI 登录页面,无需客户端密钥。

  12. 选择您将允许用于您的应用程序的 Authentication flows(身份验证流程)。确保已选择 USER_SRP_AUTH

  13. 根据需要自定义 token expiration(令牌的到期时间)、Advanced security configuration(高级安全配置)和 Attribute read and write permissions(属性读取和写入权限)。有关更多信息,请参阅配置应用程序客户端设置

  14. 为您的应用程序客户端 Add a callback URL(添加回调 URL)。在托管 UI 身份验证后,您将被引导到该地址。在您能够在应用程序中实施注销之前,您无需添加 Allowed sign-out URL(允许的注销 URL)。

    对于 iOS 或 Android 应用程序,您可以使用类似 myapp:// 的回调 URL。

  15. 为应用程序客户端选择 Identity providers(身份提供商)。至少,启用 Cognito user pool(Cognito 用户池)作为提供商。

    注意

    要使用外部身份提供商(IdP)(如 Facebook、Amazon、Google 和 Apple)以及通过 OpenID Connect(OIDC)或 SAML IdP 进行登录,请首先按向用户池添加社交登录中所示的方式对它们进行配置,然后返回到 App client settings(应用程序客户端设置)页面将其启用。

  16. 选择 OAuth 2.0 Grant Types(OAuth 2.0 授予类型)。选择 Authorization code grant(授权代码授予)以返回随后更换为用户池令牌的授权代码。由于令牌绝不会直接向终端用户公开,因此它们不太可能被泄露。但是,后端需要自定义应用程序以将授权代码换成用户池令牌。出于安全原因,对于移动应用程序,强烈建议您将授权代码授予流程与代码交换的证明密钥(PKCE)一起使用。

    选择 Implicit grant (隐式授予) 以便从 Amazon Cognito 将用户池 JSON Web 令牌(JWT)返回给您。当没有可用于将授权代码更换为令牌的后端时,您可以使用此流程。它对于调试令牌也很有帮助。

    注意

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

    只有在您的应用程序需要代表自己而不是代表用户请求访问令牌时才选择 Client credentials(客户端凭证)。

  17. 除非您希望明确地排除一个项目,否则请选择所有 OpenID Connect scopes(OpenID Connect 范围)。

  18. 选择您已配置的任意 Custom scopes(自定义范围)。自定义范围通常用于机密客户端。

  19. 选择 Create(创建)。

查看您的登录页面

在您的 App client page(应用程序客户端)页面上,选择 View hosted UI(查看托管 UI)打开一个新的浏览器选项卡,以前往预先填充了应用程序客户端 ID、范围、授权和回调 URL 参数的登录页面。

您可以使用以下 URL 手动查看托管 UI 登录网页。记下 response_type。在此示例中,response_type=code 表示授权代码授予。

https://your_domain/login?response_type=code&client_id=your_app_client_id&redirect_uri=your_callback_url

您可以使用针对隐式代码授予的以下 URL 查看托管 UI 登录网页,其中,response_type=token。成功登录后,Amazon Cognito 会将用户池令牌返回到您的 Web 浏览器的地址栏。

https://your_domain/login?response_type=token&client_id=your_app_client_id&redirect_uri=your_callback_url

您可以在响应中的 #idtoken= 参数后面找到 JSON Web Token (JWT) 身份令牌。

以下 URL 是来自隐式授予请求的示例响应。您的身份令牌字符串长得多。

https://www.example.com/#id_token=123456789tokens123456789&expires_in=3600&token_type=Bearer

使用 RS256 算法对 Amazon Cognito 用户池令牌进行签名。您可以使用 Amazon Lambda 解码和验证用户池令牌,请参阅 Amazon GitHub 网站上的 Decode and verify Amazon Cognito JWT tokens

您的域将显示在 Domain name(域名)页面上。您的应用程序客户端 ID 和回调 URL 将显示在 General settings(常规设置)页面上。如果您在控制台中所做的更改没有立即显示,请等待几分钟,然后刷新浏览器。

下一步

第 3 步 向用户池添加社交登录(可选)