本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将您自己的域用于托管 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 区域更改为美国东部(弗吉尼亚北部)。
-
一种允许您的用户池授权服务器向用户会话添加 Cookie 的应用程序。Amazon Cognito 为托管用户界面设置了几个必需的 Cookie。这包括
cognito
、cognito-fl
和XSRF-TOKEN
。尽管每个 Cookie 都符合浏览器大小限制,但更改用户池配置可能会导致托管用户界面 Cookie 的大小变大。像自定义域前面的应用程序负载均衡器 (ALB) 这样的中间服务可能会强制规定最大标题大小或总数 Cookie 大小。如果您的应用程序还设置了自己的 Cookie,则用户的会话可能会超过这些限制。为避免大小限制冲突,我们建议您的应用程序不要在托管 UI 子域上设置 Cookie。 -
允许更新 Amazon CloudFront 分配。为此,您可以为 Amazon Web Services 账户中的用户附加以下 IAM policy 声明:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontUpdateDistribution", "Effect": "Allow", "Action": [ "cloudfront:updateDistribution" ], "Resource": [ "*" ] } ] }
有关授权操作的更多信息 CloudFront,请参阅使用基于身份的策略(IAM 策略)。 CloudFront
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 中没有托管区域,请创建一个以您的自定义域为父域的根域的托管区域。有关更多信息,请参阅
-
选择创建托管区域。
-
从域名列表中输入自定义域(例如,
myapp.auth.example.com
)的父域(例如,auth.example.com
)。 -
输入托管区域的描述。
-
选择公有托管区域的托管区域类型以允许公共客户端解析您的自定义域。不支持选择私有托管区域。
-
根据需要应用标签。
-
选择创建托管区域。
注意
您还可以为自定义域创建新的托管区域,并且可以在父托管区域中创建委托集,将查询指向子域托管区域。否则,请创建 A 记录。此方法为您的托管区域提供了更大的灵活度和安全性。有关更多信息,请参阅通过 Amazon Route 53 为托管域创建子域
。
-
-
在托管区域页面上,选择您的托管区域的名称。
-
如果您还没有 DNS 记录,请为自定义域名的父域名添加 DNS 记录。为父域添加 DNS
A
记录,然后选择创建记录。以下是域auth.example.com
的示例记录。auth.example.com.
60 IN A198.51.100.1
注意
Amazon Cognito 验证您的自定义域的父域是否有 DNS 记录,以防止意外劫持生产域。如果您没有父域的 DNS 记录,则当您尝试设置自定义域时,Amazon Cognito 将返回错误消息。就父域验证而言,授权起始记录 (SOA) 记录不足以构成足以验证父域名的 DNS 记录。
-
为您的自定义域名添加 DNS 记录。例如,您的记录必须指向自定义域别名目标
123example.cloudfront.net
。再次选择创建记录。 -
输入与您的自定义域相匹配的记录名称(例如,
myapp
)以创建myapp.auth.example.com
记录。 -
启用别名选项。
-
选择将流量路由至、别名到 CloudFront 分配。输入由 Amazon Cognito 在您创建自定义域时提供的别名目标。
-
选择创建记录。
注意
新记录可能需要大约 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 中的证书。有关更多信息,请参阅《Amazon Certificate Manager 用户指南》中的入门。
将您的证书添加到 ACM 时,您必须选择美国东部(弗吉尼亚北部)作为 Amazon 区域。
您可以使用 Amazon Cognito 控制台或 API 更改证书。