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

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

添加应用程序客户端并设置托管 UI

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

在用户池中创建应用程序
  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。

  2. 选择用户池

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

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

  5. 选择旁边的操作,然后选创建自定义域创建 Amazon Cognito 域。如果您已配置用户群体域,请先选择删除 Amazon Cognito 域删除自定义域,然后再创建新的自定义域。

  6. 输入可用的域前缀,以与 Amazon 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(身份提供商)。至少,启用 Amazon Cognito 用户群体作为提供商。

    注意

    要使用外部身份提供商 (IdPs)(例如 Facebook、亚马逊、谷歌和苹果)以及通过 OpenID Connect (OIDC) 或 SAML 登录 IdPs,请先按照添加用户池通过第三方登录中所示对其进行配置,然后返回应用程序客户端设置页面将其启用。

  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(应用程序客户端)页面上,选择 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 Cognito JWT 令牌解码和验证。Amazon GitHub

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

后续步骤

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