添加带有托管 UI 的应用程序客户端 - Amazon Cognito

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

添加带有托管 UI 的应用程序客户端

创建用户池后,您可以为应用程序创建应用程序客户端,以打开托管 UI 的内置网页。在托管用户界面中,用户可以:

创建 Amazon Cognito 用户池后,下一步是设置应用程序客户端。应用程序客户端是一个应用程序的用户池设置。该应用程序可以使用托管用户界面、对用户池API的SDK请求或两者对用户进行身份验证。在本例中,我们将为托管 UI 和 OAuth 2.0 授权服务器配置应用程序客户端。托管用户界面是一组处理常见用户身份验证流程的网页,例如注册、登录、密码重置和多因素身份验证。

激活托管 UI 时,还会激活 OAuth 2.0 授权服务器。授权服务器处理 OpenID Connect (OIDC) 和 OAuth 2.0 身份验证流程。任务包括查询用户帐户、发行令牌以及与外部身份提供商集成。托管用户界面和授权服务器最适合您想要限制自定义 UI 创建级别的应用程序,以及您的应用程序最适合与OIDC身份提供商配合使用的应用程序。

以下是托管 UI 和授权服务器的一些功能:

托管 UI 应用程序客户端独有的功能
在托管用户界面和SDK基于应用程序的客户端之间共享的功能
要为托管界面创建应用程序客户端,请登录
  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入您的 AWS 凭据。

  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. 选择您的应用程序允许的身份验证流程。确保已选择 USER_SRP_AUTH

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

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

    对于 iOS 或 Android 应用程序,您可以使用回调,URL例如myapp://

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

    注意

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

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

    选择 “隐式授权”,让 Amazon Cognito 将用户池JSON网络令牌 (JWT) 返还给您。当没有可用于将授权代码更换为令牌的后端时,您可以使用此流程。它对于调试令牌也很有帮助。

    注意

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

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

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

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

  19. 选择 Create(创建)。

查看您的登录页面

在您的应用程序客户端页面上,选择查看托管用户界面,打开一个新的浏览器选项卡,进入预先填充了应用程序客户端 ID、范围、授权和回调参数URL的登录页面。

您可以通过以下URL方式手动查看托管用户界面登录网页。记下 response_type。在此示例中,response_type=code 表示授权代码授予。

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

你可以查看托管的用户界面登录网页,其中包含以下URL隐式代码授权,其中 r es ponse_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

Amazon Cognito 用户池令牌使用算法进行RS256签名。您可以使用解码和验证用户池令牌。 AWS Lambda有关更多信息,请参阅网站上的AWS GitHub 解码和验证 Amazon JWT Cognito 令牌。

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