将您自己的域用于托管 UI - Amazon Cognito

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

将您自己的域用于托管 UI

在设置应用程序客户端后,您可以使用适用于 Amazon Cognito 托管 UI 和身份验证 API 端点的自定义域配置用户池。利用自定义域,您可以使用您自己的 Web 地址以允许用户登录您的应用程序。

将自定义域添加到用户池

要将自定义域添加到用户池,请在 Amazon Cognito 控制台中指定域名,并提供您使用 AWS Certificate Manager(ACM)管理的证书。在添加域后,Amazon Cognito 提供了一个要添加到 DNS 配置的别名目标。

先决条件

在开始之前,您需要:

  • 用户池和应用程序客户端。有关更多信息,请参阅用户池入门

  • 您拥有的 Web 域。其父域必须具有有效的 DNS A 记录。您可以为该记录分配任何值。父域可以是域的根,也可以是域层次结构中上一级的子域。例如,如果您的自定义域是 auth.xyz.example.com,Amazon Cognito 必须能够将 xyz.example.com 解析为 IP 地址。为了防止意外影响客户基础设施,Amazon Cognito 不支持对自定义域使用顶级域(TLD)。有关更多信息,请参阅域名

  • 能够为自定义域创建子域。我们建议使用 auth 作为子域。例如:auth.example.com

    注意

    如果您没有通配符证书,则可能需要为自定义域的子域获取新证书。

  • 由 ACM 管理的安全套接字层(SSL)证书。

    注意

    在申请或导入证书之前,必须在 ACM 控制台中将 AWS 区域更改为美国东部(弗吉尼亚北部)。

  • 一种允许您的用户池授权服务器向用户会话添加 Cookie 的应用程序。Amazon Cognito 为托管用户界面设置了几个必需的 Cookie。这包括 cognitocognito-flXSRF-TOKEN。尽管每个 Cookie 都符合浏览器大小限制,但更改用户池配置可能会导致托管用户界面 Cookie 的大小变大。像自定义域前面的应用程序负载均衡器 (ALB) 这样的中间服务可能会强制规定最大标题大小或总数 Cookie 大小。如果您的应用程序还设置了自己的 Cookie,则用户的会话可能会超过这些限制。为避免大小限制冲突,我们建议您的应用程序不要在托管 UI 子域上设置 Cookie。

  • 允许更新 Amazon CloudFront 分配。为此,您可以为 AWS 账户中的用户附加以下 IAM policy 声明:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontUpdateDistribution", "Effect": "Allow", "Action": [ "cloudfront:updateDistribution" ], "Resource": [ "*" ] } ] }

    有关授权操作的更多信息 CloudFront,请参阅使用基于身份的策略(IAM 策略)。 CloudFront

    Amazon Cognito 最初使用您的 IAM 权限来配置 CloudFront分配,但分配由管理。 AWS您无法更改 Amazon Cognito 与您的用户池关联的 CloudFront 分配的配置。例如,您无法更新安全策略中支持的 TLS 版本。

步骤 1:输入自定义域名

您可以使用 Amazon Cognito 控制台或 API 将域添加到用户池。

Amazon Cognito console
将域从 Amazon Cognito 控制台添加到用户池:
  1. 登录 Amazon Cognito 控制台。如果出现提示,请输入 AWS 凭证。

  2. 选择用户池

  3. 选择要向其添加域的用户池。

  4. 选择应用程序集成选项卡。

  5. 选择在旁边的操作,然后选择创建自定义域

    注意

    如果您已配置用户池域,请先选择删除 Cognito 域删除自定义域来删除现有域,然后再创建新的自定义域。

  6. 对于自定义域,请输入您希望与 Amazon Cognito 一起使用的域的 URL。您的域名只能包含小写字母、数字和连字符。请勿对第一个或最后一个字符使用连字符。使用句点来分隔子域名。

  7. 对于 ACM 证书,请选择要用于您的域的 SSL 证书。无论您的用户池如何,只有美国东部(弗吉尼亚北部)的 ACM 证书才有资格用于 Amazon Cognito 自定义域。 AWS 区域

    如果您没有可用证书,则可以使用 ACM 在美国东部(弗吉尼亚北部)预置一个证书。有关更多信息,请参阅《AWS Certificate Manager 用户指南》中的入门

  8. 选择创建

  9. Amazon Cognito 将您返回到应用程序集成选项卡。此时将显示标题为在域名的 DNS 中创建别名记录的消息。记下控制台中显示的别名目标。在下一步骤中,将使用它们将流量指向您的自定义域。

API
使用 Amazon Cognito API 将域添加到用户池:

步骤 2:添加别名目标和子域

在本步骤中,您将通过域名服务器(DNS)服务提供商设置一个别名,该别名指回到上一个步骤中的别名目标。如果您将 Amazon Route 53 用于 DNS 地址解析,请选择使用 Route 53 添加别名目标和子域部分。

  • 如果您没有将 Route 53 用于 DNS 地址解析,则必须使用您的 DNS 服务提供商配置工具将上一个步骤中的别名目标添加到域 DNS 记录中。您的 DNS 提供商还需要为您的自定义域设置子域。

  1. 登录 Route 53 控制台。如果出现提示,请输入 AWS 凭证。

  2. 如果您在 Route 53 中没有托管区域,请创建一个以您的自定义域为父域的根域的托管区域。有关更多信息,请参阅

    1. 选择创建托管区域

    2. 域名列表中输入自定义域(例如,myapp.auth.example.com)的父域(例如,auth.example.com)。

    3. 输入托管区域的描述

    4. 选择公有托管区域的托管区域类型以允许公共客户端解析您的自定义域。不支持选择私有托管区域

    5. 根据需要应用标签

    6. 选择创建托管区域

      注意

      您还可以为自定义域创建新的托管区域,并且可以在父托管区域中创建委托集,将查询指向子域托管区域。否则,请创建 A 记录。此方法为您的托管区域提供了更大的灵活度和安全性。有关更多信息,请参阅通过 Amazon Route 53 为托管域创建子域

  3. 托管区域页面上,选择您的托管区域的名称。

  4. 如果您还没有 DNS 记录,请为自定义域名的父域名添加 DNS 记录。为父域添加 DNS A 记录,然后选择创建记录。以下是域 auth.example.com 的示例记录。

    auth.example.com. 60 IN A 198.51.100.1

    注意

    Amazon Cognito 验证您的自定义域的父域是否有 DNS 记录,以防止意外劫持生产域。如果您没有父域的 DNS 记录,则当您尝试设置自定义域时,Amazon Cognito 将返回错误消息。就父域验证而言,授权起始记录 (SOA) 记录不足以构成足以验证父域名的 DNS 记录。

  5. 为您的自定义域名添加 DNS 记录。例如,您的记录必须指向自定义域别名目标123example.cloudfront.net。再次选择创建记录

  6. 输入与您的自定义域相匹配的记录名称(例如,myapp)以创建 myapp.auth.example.com 记录。

  7. 启用别名选项。

  8. 选择将流量路由至别名到 CloudFront 分配。输入由 Amazon Cognito 在您创建自定义域时提供的别名目标

  9. 选择创建记录

    注意

    新记录可能需要大约 60 秒钟才能传播到所有 Route 53 DNS 服务器。您可以使用 Route 53 GetChangeAPI 方法来验证您的更改是否已传播。

步骤 3:验证登录页面

  • 验证登录页面是否可从您的自定义域访问。

    通过在浏览器中输入此地址,使用您的自定义域和子域进行登录。这是包含子域 auth 的自定义域 example.com 的示例 URL:

    https://myapp.auth.example.com/login?response_type=code&client_id=<your_app_client_id>&redirect_uri=<your_callback_url>

更改自定义域的 SSL 证书

如果需要,您可以使用 Amazon Cognito 更改应用于自定义域的证书。

通常,在使用 ACM 进行常规证书续订后,此操作是不必要的。当您续订 ACM 中的现有证书时,证书的 ARN 保持不变,并且您的自定义域将自动使用新证书。

但是,如果您将现有证书替换为新证书,ACM 将为新证书提供一个新 ARN。要将新证书应用于自定义域,您必须将此 ARN 提供给 Amazon Cognito。

在提供新证书后,Amazon Cognito 需要长达 1 小时才能将它分配给自定义域。

开始前的准备工作

您必须先将证书添加到 Amazon Cognito,然后才能更改 ACM 中的证书。有关更多信息,请参阅《AWS Certificate Manager 用户指南》中的入门

将您的证书添加到 ACM 时,您必须选择美国东部(弗吉尼亚北部)作为 AWS 区域。

您可以使用 Amazon Cognito 控制台或 API 更改证书。

AWS Management Console
更新 Amazon Cognito 控制台的证书:
  1. 登录 AWS Management Console 并打开 Amazon Cognito 控制台,网址为。https://console.aws.amazon.com/cognito/home

  2. 选择用户池

  3. 选择要更新其证书的用户池。

  4. 选择应用程序集成选项卡。

  5. 选择 操作编辑 ACM 证书

  6. 选择您希望与自定义域关联的新证书。

  7. 选择保存更改

API
如要更新证书(Amazon Cognito API)