Amazon Cognito
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

将您自己的域用于托管 UI

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

将自定义域添加到用户池

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

先决条件

在开始之前,您需要:

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

  • 您拥有的 Web 域。它的根目录在 DNS 中具有有效的 A 记录。有关更多信息,请参阅域名

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

    注意

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

  • 由 ACM 管理的安全套接字层 (SSL) 证书。在请求或导入证书之前,您必须在 ACM 控制台中将 AWS 区域更改为美国东部(弗吉尼亚北部)。

  • 要设置自定义域名或更新其证书,您必须有权更新 Amazon CloudFront 分配。为此,您可以为 AWS 账户中的 IAM 用户、组或角色附加以下 IAM 策略声明:

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

    请参阅为 CloudFront 使用基于身份的策略(IAM 策略)

步骤 1:输入自定义域名

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

将域添加到用户池(Amazon Cognito 控制台)

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

  2. 通过 https://console.amazonaws.cn/cognito/home 登录 AWS 管理控制台并打开 Amazon Cognito 控制台。

  3. 选择管理用户池

  4. Your User Pools (您的用户池) 页面上,选择要将您的域添加到的用户池。

  5. 在左侧导航菜单上,选择 Domain name (域名)

  6. Your own domain (您自己的域) 下,选择 Use your domain (使用您的域)

  7. 对于 Domain name (域名),输入您的自定义域名。您的域名只能包含小写字母、数字和连字符。请勿对第一个或最后一个字符使用连字符。使用句点来分隔子域名。

  8. 对于 AWS managed certificate (AWS 托管证书),选择要用于您的域的 SSL 证书。您可以选择使用 ACM 管理的证书之一。

    如果您没有可供选择的证书,则可使用 ACM 预置一个证书。有关更多信息,请参阅 AWS Certificate Manager 用户指南 中的入门

  9. 选择 Save changes

  10. 记下别名目标别名目标是指向 Amazon CloudFront 分配的别名资源记录集,而不是 IP 地址或域名。

将域添加到用户池 (Amazon Cognito API)

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

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

将别名目标和子域添加到当前 DNS 配置
  • 如果您没有将 Route 53 用于 DNS 地址解析,则需要让您的 DNS 服务提供商添加上一个步骤中的别名目标作为用户池自定义域的别名。您的 DNS 提供商还需要为您的自定义域设置子域。

使用 Route 53 添加别名目标和子域
  1. 登录 Route 53 控制台。系统可能会提示您输入 AWS 凭证。

  2. 如果您在 Route 53 中没有托管区域,请设置一个托管区域。否则,请跳过此步骤。

    1. 选择 Create Hosted Zone

    2. 域名列表中选择您的自定义域。

    3. 对于注释,键入有关该托管区域的可选注释。

    4. 选择 Create

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

  4. 选择 Create Record Set

  5. 别名选项选择

  6. 将在上一个步骤中记下的别名目标名称键入到别名目标

  7. 选择 Create

    注意

    您的新记录需要一定时间才会传播到 Route 53 DNS 服务器。目前,验证更改是否已传播的唯一方式是使用 Route 53 GetChange API 方法。更改通常在 60 秒内传播到所有 Route 53 名称服务器。

  8. 使用别名目标在 Route 53 中添加域名。

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

    2. 选择创建记录集并输入以下值:

      1. 对于名称,键入首选域名。例如,如果您尝试创建的子域是 auth.example.com,请键入 auth

      2. 对于 Type,选择 A - IPv4 address

      3. 别名选项选择

      4. 将在上一个步骤中记下的别名目标名称键入到别名目标

    3. 选择 Create

      注意

      或者,您也可以创建一个新的托管区域来保存与您的子域关联的记录。您还可以在父托管区域中创建委托集来将客户端送交给子域托管区域。当您管理托管区域时,此方法提供了更大的灵活性(例如,限制可以编辑该区域的人员)。您只能将此方法用于公有托管区域,因为目前不支持将 NS 记录添加到私有托管区域。有关更多信息,请参阅为通过 Amazon Route 53 托管的域创建子域

步骤 3:验证登录页面

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

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

    https://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 小时才能将它分配给自定义域。

开始之前

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

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

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

更新证书(Amazon Cognito 控制台)

  1. 通过 https://console.amazonaws.cn/cognito/home 登录 AWS 管理控制台并打开 Amazon Cognito 控制台。

  2. 选择管理用户池

  3. Your User Pools (您的用户池) 页面上,选择要将您的域添加到的用户池。

  4. 在左侧导航菜单上,选择 Domain name (域名)

  5. Your own domain (您自己的域) 下,对于 AWS managed certificate (AWS 托管证书),选择您的新证书。

  6. 选择 Save changes

更新证书 (Amazon Cognito API)