使用 Amazon Cognito 托管 UI 进行注册和登录 - Amazon Cognito
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

使用 Amazon Cognito 托管 UI 进行注册和登录

Amazon Cognito 管用户界面为您提供符合 OAuth 2.0 标准的授权服务器。它提供了最终用户流的默认实现,如注册,身份验证等。您可以通过简单地更改用户池配置来自定义用户流,例如添加多重身份验证 (MFA)。您的应用程序将重定向到托管 UI,它将处理用户流。通过提供特定品牌的徽标和改变外观,可以定制用户体验。Amazon Cognito 托管用户界面还允许您轻松添加最终用户登录的功能,使其能够通过社交提供商(Facebook、亚马逊登录、谷歌和苹果)、任何 OpenID Connect (OIDC) 兼容和 SAML 提供商登录。

使用 Amazon Amplify 设置托管 UI

如果您使用 Amazon Amplify 向 Web 或移动应用程序添加身份验证功能,则可以使用 Amazon Amplify 框架中的命令行界面 (CLI) 和库来设置托管 UI。要向应用程序添加身份验证功能,您可以使用 Amazon Amplify CLI 将身份验证类别添加到项目中。然后,在客户端代码中,您可以使用Amazon Amplify库使用 Amazon Cognito 用户池对用户进行身份验证。

您可以显示预构建的托管 UI,也可以通过重定向到社交登录提供商(例如 Facebook、Google、Amazon 或 Apple)的 OAuth 2.0 终端节点联合用户身份。用户成功通过社交提供商身份验证之后,如果需要,Amazon Amplify 在您的用户池中创建一个新用户,并向您的应用程序提供用户的 OIDC 令牌。

有关更多信息,请参阅您使用的应用平台的 Amazon Amplify 框架文档:

使用 Amazon Cognito 控制台设置托管 UI

  1. 转至Amazon Cognito 控制台。系统可能会提示您输入 Amazon 凭证。

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

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

  4. 在页面左侧的导航栏上,选择常规设置下的应用程序客户端

  5. 选择 Add an app client

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

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

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

  9. Select身份验证流配置选项。

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

  11. (可选)选择设置属性读取和写入权限

  12. 选择 Create app client

  13. 记下应用程序客户端 ID

  14. 选择返回池详细信息

配置应用程序

  1. 从控制台页面左侧的导航栏中选择应用程序客户端设置

  2. 选择 Cognito 用户池作为其中一个启用身份提供商

    注意

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

  3. Enter回调 URL。回调 URL 指示在用户成功登录之后将被重定向到哪里。

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

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

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

  7. 您可以同时启用授权代码授予隐式代码授予,然后按需使用每个授予。

  8. 除非您希望明确地排除一个允许的 OAuth 范围,否则请选中所有“允许的 OAuth 范围”的复选框。

  9. 只有在您的应用程序需要代表自己而不是代表用户请求访问令牌时才选择 Client credentials

  10. 选择 Save Changes (保存更改)

配置域

  1. Select选择域名

  2. 在存储库的域名页面上,键入域前缀并检查可用性或输入您自己的域。

  3. 记下完整的域地址。

  4. 选择 Save Changes (保存更改)

查看您的登录页面

您可以使用以下 URL 查看托管 UI 登录网页。记下 response_type。在本例中为,响应类型 = 代码获取授权代码授予。

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) 身份令牌。

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

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

您可以使用Amazon Lambda,请参阅解码并验证 Amazon Cognito JWT 令牌上AmazonGitHub 网站。

Amazon Cognito 用户池令牌使用 RS256 算法对进行签名。

您可能需要先等待一分钟以刷新浏览器,之后才会显示您在控制台中所做的更改。

您的域将显示在域名页面上。您的应用程序客户端 ID 和回调 URL 将显示在应用程序客户端设置页面上。

注意

Amazon Cognito 托管的登录网页不支持自定义身份验证流程。