将您自己的域用于托管 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 将域添加到用户池。
步骤 2:添加别名目标和子域
在本步骤中,您将通过域名服务器 (DNS) 服务提供商设置一个别名,该别名指回到上一个步骤中的别名目标。如果您将 Amazon Route 53 用于 DNS 地址解析,请选择使用 Route 53 添加别名目标和子域部分。
-
如果您没有将 Route 53 用于 DNS 地址解析,则必须使用您的 DNS 服务提供商配置工具将上一个步骤中的别名目标添加到域 DNS 记录中。您的 DNS 提供商还需要为您的自定义域设置子域。
-
登录 Route 53 控制台
。如果出现提示,请输入 Amazon 凭证。 -
如果您在 Route 53 中没有托管区域,则必须按以下步骤创建一个托管区域。否则,请继续步骤 3。
-
选择 Create Hosted Zone(创建托管区域)。
-
从 Domain Name(域名)列表中输入自定义域(例如,
myapp.auth.example.com
)的父域(例如,auth.example.com
)。 -
{可选}对于 Comment(注释),输入有关该托管区域的注释。
-
选择 Public hosted zone(公有托管区域)的托管区域 Type(类型)以允许公共客户端解析您的自定义域。不支持选择 Private hosted zone(私有托管区域)。
-
根据需要应用 Tags(标签)。
-
选择 Create Hosted Zone(创建托管区域)。
注意
您还可以为自定义域创建新的托管区域,并且可以在父托管区域中创建委托集,将查询指向子域托管区域。此方法为您的托管区域提供了更大的灵活度和安全性。有关更多信息,请参阅通过 Amazon Route 53 为托管域创建子域
。
-
-
在 Hosted Zones(托管区域)页面上,选择您的托管区域的名称。
-
选择 Create record(创建记录)。为父域添加 DNS 记录,然后选择 Create records(创建记录)。以下是域
auth.example.com
的示例记录。auth.example.com.
60 IN A198.51.100.1
注意
Amazon Cognito 验证您的自定义域的父域是否有 DNS 记录,以防止意外劫持生产域。如果您没有父域的 DNS 记录,则当您尝试设置自定义域时,Amazon Cognito 将返回错误消息。
-
再次选择 Create Record(创建记录)。
-
输入与您的自定义域相匹配的 Record name(记录名称)(例如,
myapp
)以创建myapp.auth.example.com
记录。 -
将先前记下的别名目标名称输入到 Alias Target(别名目标)。
-
启用 Alias(别名)选项。
-
选择 Route traffic to(将流量路由至)、Alias to CloudFront distribution(别名到 CloudFront 分配)。输入由 Amazon Cognito 在您创建自定义域时提供的 Alias target(别名目标)。
-
选择 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 更改证书。