将您自己的域用于托管 UI - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将您自己的域用于托管 UI

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

将自定义域添加到用户池

要将自定义域添加到用户池,请在 Amazon Cognito 控制台中指定域名,并提供您使用 Amazon 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 控制台中将Amazon区域更改为美国东部(弗吉尼亚北部)。

  • 要设置自定义域名或更新其证书,您必须有更新 Amazon CloudFront 分配的权限。为此,您可以为 Amazon Web Services 账户 中的用户附加以下 IAM policy 声明:

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

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

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

步骤 1:输入自定义域名

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

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

  2. 选择 User pools(用户池)。

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

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

  5. 选择在 Domain(域)旁边的 Actions(操作),然后选择 Create custom domain(创建自定义域)。

    注意

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

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

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

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

  8. 选择 Create(创建)。

  9. Amazon Cognito 将您返回到 App integration(应用程序集成)选项卡。此时将显示标题为 Create an alias record in your domain's DNS(在域名的 DNS 中创建别名记录)的消息。记下控制台中显示的 Domain(域)和 Alias target(别名目标)。在下一步骤中,将使用它们将流量指向您的自定义域。

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

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

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

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

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

  2. 如果您在 Route 53 中没有托管区域,则必须按以下步骤创建一个托管区域。否则,请继续步骤 3。

    1. 选择 Create Hosted Zone(创建托管区域)。

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

    3. {可选}对于 Comment(注释),输入有关该托管区域的注释。

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

    5. 根据需要应用 Tags(标签)。

    6. 选择 Create Hosted Zone(创建托管区域)。

      注意

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

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

  4. 选择 Create record(创建记录)。为父域添加 DNS 记录,然后选择 Create records(创建记录)。以下是域 auth.example.com 的示例记录。

    auth.example.com. 60 IN A 198.51.100.1

    注意

    Amazon Cognito 验证您的自定义域的父域是否有 DNS 记录,以防止意外劫持生产域。如果您没有父域的 DNS 记录,则当您尝试设置自定义域时,Amazon Cognito 将返回错误消息。

  5. 再次选择 Create Record(创建记录)。

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

  7. 将先前记下的别名目标名称输入到 Alias Target(别名目标)。

  8. 启用 Alias(别名)选项。

  9. 选择 Route traffic to(将流量路由至)、Alias to CloudFront distribution(别名到 CloudFront 分配)。输入由 Amazon Cognito 在您创建自定义域时提供的 Alias target(别名目标)。

  10. 选择 Create Records(创建记录)。

    注意

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

步骤 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 中的证书。有关更多信息,请参阅《Amazon Certificate Manager 用户指南》中的入门

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

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

Amazon Web Services Management Console
更新 Amazon Cognito 控制台的证书:
  1. 登录Amazon Web Services Management Console并打开 Amazon Cognito 控制台 (https://console.amazonaws.cn/cognito/home)。

  2. 选择 User Pools(用户池)。

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

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

  5. 选择 Actions(操作)、Edit ACM certificate(编辑 ACM 证书)。

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

  7. 选择 Save changes(保存更改)。

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