你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息。
在开始之前,请使用此页面顶部的 “选择策略类型 选择器”来选择要设置的策略类型。 Azure Active Directory B2C 提供了两种定义用户如何与应用程序交互的方法:通过预定义的用户流,或者通过可完全配置的自定义策略。 对于每种方法,本文中所需的步骤都不同。
本文介绍如何在 Azure Active Directory B2C (Azure AD B2C) 的重定向 URL 中启用自定义域。 使用已验证的自定义域具有以下优势:
它提供了更加无缝的用户体验。 从用户的角度来看,他们在登录过程中会保留在你的域中,而不是重定向到 Azure AD B2C 默认域 <tenant-name.b2clogin.com>。
通过保持应用程序在登录期间使用相同的域名,可以减轻 第三方 Cookie 阻止的影响。
您可以将可在 Azure AD B2C 租户中创建的对象(用户帐户和应用程序)数量从默认的 125 万个增加到 525 万个。
自定义域概述
可以使用 Azure Front Door 为 Azure AD B2C 启用自定义域。 Azure Front Door 是一个全球入口点,它使用 Microsoft 全球边缘网络创建快速、安全且可广泛缩放的 Web 应用程序。 可以在 Azure Front Door 后面呈现 Azure AD B2C 内容,然后在 Azure Front Door 中配置一个选项,以通过应用程序 URL 中的自定义域传送内容。
观看此视频,了解 Azure AD B2C 自定义域。
下图说明了 Azure Front Door 集成:
- 在应用程序中,用户选择登录按钮,这会将他们带到 Azure AD B2C 登录页面。 此页面指定自定义域名。
- Web 浏览器将自定义域名解析为 Azure Front Door IP 地址。 在 DNS 解析过程中,一个带有自定义域名的规范名称 (CNAME) 记录将指向 Front Door 的默认前端主机(例如
contoso-frontend.azurefd.net
)。 - 发送到自定义域(例如
login.contoso.com
)的流量将路由到指定的 Front Door 默认前端主机 (contoso-frontend.azurefd.net
)。 - Azure Front Door 使用 Azure AD B2C
<tenant-name>.b2clogin.com
默认域调用 Azure AD B2C 内容。 对 Azure AD B2C 终结点的请求包括原始自定义域名。 - Azure AD B2C 通过显示相关内容和原始自定义域来响应请求。
重要
从浏览器到 Azure Front Door 的连接应始终使用 IPv4 而不是 IPv6。
使用自定义域时,请考虑以下事项:
- 您可以设置多个自定义域。 有关支持的自定义域的最大数量,请参阅适用于 Azure AD B2C 的 Microsoft Entra 服务限制和约束,以及适用于 Azure Front Door 的 Azure 订阅和服务限制、配额和约束。
- Azure Front Door 是一项单独的 Azure 服务,因此会产生额外费用。 有关详细信息,请参阅 Front Door 定价。
- 如果您有多个应用程序,请将它们全部迁移到自定义域,因为浏览器会将 Azure AD B2C 会话存储在当前使用的域名下。
- 配置自定义域后,用户仍将能够访问 Azure AD B2C 默认域名 <tenant-name.b2clogin.com>。 你需要阻止对默认域的访问,以便攻击者无法使用它访问应用或运行分布式拒绝服务 (DDoS) 攻击。 提交支持工单以请求阻止对默认域的访问。
警告
在自定义域正常工作之前,不要请求阻止默认域。
先决条件
- 创建用户流,以便用户能够注册并登录应用程序。
- 注册 Web 应用程序。
- 完成 Active Directory B2C 中的自定义策略入门中的步骤。 本教程指导你如何更新自定义策略文件以使用 Azure AD B2C 租户配置。
- 注册 Web 应用程序。
步骤 1:向 Azure AD B2C 租户添加自定义域名
创建 Azure AD B2C 租户时,它附带一个初始域名 <domainname.onmicrosoft.com>。 您无法更改或删除初始域名,但可以添加自己的自定义域。
按照以下步骤将自定义域添加到 Azure AD B2C 租户:
-
重要
对于这些步骤,请务必登录到 Azure AD B2C 租户并选择 Microsoft Entra ID 服务。
将 DNS 信息添加到域注册机构。 将自定义域名添加到 Microsoft Entra ID 后,为您的域创建 DNS
TXT
或MX
记录。 为域创建此 DNS 记录可以验证域名的所有权。以下示例演示了 login.contoso.com 和 account.contoso.com 的 TXT 记录:
名称(主机名) 类型 数据 登录 TXT 格式 MS=ms12345678 帐户 TXT 格式 MS=ms87654321 TXT 记录必须与域的子域或主机名相关联。 例如,contoso.com 域的 login 部分。 如果主机名为空或
@
,则 Microsoft Entra ID 将无法验证您添加的自定义域。 在以下示例中,两条记录的配置都不正确。名称(主机名) 类型 数据 TXT 格式 MS=ms12345678 @ TXT 格式 MS=ms12345678 小窍门
您可以使用任何公开可用的 DNS 服务(如 GoDaddy)管理您的自定义域。 如果没有 DNS 服务器,可使用 Azure DNS 区域或应用服务域。
验证自定义域名。 验证您计划使用的每个子域或主机名。 例如,要能够通过 login.contoso.com 和 account.contoso.com 登录,需要验证这两个子域,而不只是顶级域 contoso.com。
重要
验证域后, 删除 您创建的 DNS TXT 记录。
步骤 2:创建新的 Azure Front Door 实例
按照以下步骤创建 Azure Front Door:
登录到 Azure 门户。
若要选择包含要用于 Azure Front Door 的 Azure 订阅的目录, 而不是 包含 Azure AD B2C 租户的目录,请选择顶部菜单中的 “设置 ”图标,从 “目录 + 订阅 ”菜单中切换到 Azure AD B2C 租户。
按照创建 Front Door 配置文件 - 快速创建中的步骤,使用以下设置为 Azure AD B2C 租户创建 Front Door:
密钥 价值 订阅 选择 Azure 订阅。 资源组 选择现有的资源组,或创建一个新的组。 名称 为配置文件命名,例如 b2cazurefrontdoor
。层 选择“标准”或“高级”层。 标准层在内容传送方面经过优化。 高级层构建于标准层的基础之上,更注重安全性。 请参阅层级比较。 终结点名称 为终结点输入全局唯一的名称,例如 b2cazurefrontdoor
。 “终结点主机名”将自动生成。来源类型 选择 Custom
。源主机名 输入 <tenant-name>.b2clogin.com
。 将<tenant-name>
替换为您的 Azure AD B2C 租户名称,例如contoso.b2clogin.com
。将 Caching 和 WAF 策略 留空。
创建 Azure Front Door 资源后,选择 “概述”,然后复制 “终结点主机名”。 您稍后需要这个。 它类似于
b2cazurefrontdoor-ab123e.z01.azurefd.net
。确保源的“主机名”和“源主机头”具有相同的值:
- 在“设置”下,选择“源组”。
- 从列表中选择源组,例如 default-origin-group。
- 在右侧窗格中,选择“源主机名”,例如 。
- 在“更新源”窗格中,更新“主机名”和“源主机头”,使其具有相同的值。
步骤 3:在 Azure Front Door 上设置自定义域
在此步骤中,将在 步骤 1 中注册的自定义域添加到 Azure Front Door。
3.1. 创建 CNAME DNS 记录
要添加自定义域,请与您的域提供商一起创建规范名称 (CNAME) 记录。 CNAME 记录是一种 DNS 记录,用于将源域名映射到目标域名(别名)。 对于 Azure Front Door,源域名是您的自定义域名,目标域名是您在步骤 2 中配置的 Front Door 默认主机名 。创建新的 Azure Front Door 实例。 例如,b2cazurefrontdoor-ab123e.z01.azurefd.net
。
在 Front Door 验证您创建的 CNAME 记录后,寻址到源自定义域(如 login.contoso.com
)的流量将路由到指定的目标 Front Door 默认前端主机,如 contoso-frontend.azurefd.net
。 有关详细信息,请参阅将自定义域添加到 Front Door。
若要创建自定义域的 CNAME 记录,请执行以下操作:
登录到你的自定义域的域提供商的网站。
查阅提供商的文档,或者在网站中搜索标有“域名”、“DNS”或“名称服务器管理”的区域,找到用于管理 DNS 记录的页面。
为您的自定义域创建 CNAME 记录条目并填写下表中所示的字段(字段名称可能会有所不同):
来源 类型 目的地 <login.contoso.com>
CNAME contoso-frontend.azurefd.net
来源:输入您的自定义域名(例如,login.contoso.com)。
键入:输入 CNAME。
目标:输入您在 步骤 2 中创建的默认 Front Door 前端主机。 必须采用 <主机名>.azurefd.net 格式 。 例如,
contoso-frontend.azurefd.net
。
保存更改。
3.2. 将自定义域与 Front Door 相关联
在 Azure 门户主页中搜索
myb2cazurefrontdoor
Azure Front Door 资源,并将其选中以将其打开。在左侧菜单中的“设置”下,选择“域”。
选择“添加域”。
对于“DNS 管理”,请选择“所有其他 DNS 服务”。
对于“自定义域”,请输入你的自定义域,例如 。
将其他值保留默认值,然后选择“添加”。 你的自定义域随即会添加到列表中。
在刚刚添加的域的“验证状态”下,选择“等待中”。 此时会打开一个包含 TXT 记录信息的窗格。
登录到你的自定义域的域提供商的网站。
查阅提供商的文档,或者在网站中搜索标有“域名”、“DNS”或“名称服务器管理”的区域,找到用于管理 DNS 记录的页面。
创建新的 TXT DNS 记录并填写字段,如下所示:
- Name:
_dnsauth.login.contoso.com
,但您只需输入_dnsauth
. - 类型:
TXT
- 值:类似于
75abc123t48y2qrtsz2bvk......
.
添加 TXT DNS 记录后,Front Door 资源中的“验证状态”最终将从“等待中”更改为“已批准”。 您可能需要重新加载页面才能进行更改。
- Name:
返回到 Azure 门户。 在刚刚添加的域的“终结点关联”下,选择“未关联”。
对于“选择终结点”,请从下拉列表中选择主机名终结点。
对于“选择路由”列表,请选择“default-route”,然后选择“关联”。
3.3. 启用路由
default-route 将流量从客户端路由到 Azure Front Door。 然后,Azure Front Door 使用你的配置将流量发送到 Azure AD B2C。 按照以下步骤启用 default-route。
选择“Front Door 管理器”。
要启用 default-route,请首先从 Front Door 管理器中的终结点列表中展开某个终结点。 然后选择“default-route”。
以下屏幕截图显示了如何选择默认路由。
选中 Enable route 复选框。
选择“更新”以保存更改。
步骤 4:配置 CORS
如果使用自定义 HTML 模板自定义 Azure AD B2C 用户界面,则需要使用自定义域 配置 CORS 。
通过以下步骤为跨域资源共享配置 Azure Blob 存储:
- 在 Azure 门户中导航到存储帐户。
- 在菜单中,选择 CORS。
- 对于“允许的源”,请输入
https://your-domain-name
。 将your-domain-name
替换为您的域名。 例如,https://login.contoso.com
。 输入租户名称时全部使用小写字母。 - 对于“允许的方法”,请同时选择 和
GET
OPTIONS
。 - 对于“允许的标头”,请输入一个星号 (*)。
- 对于“公开的标头”,请输入一个星号 (*)。
- 对于“最大期限”,请输入 200。
- 选择“保存”。
测试自定义域
登录到 Azure 门户。
如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
在 Azure 门户中,搜索并选择 Azure AD B2C。
在 Policies (策略) 下,选择 User flows (policies) (用户流(策略))。
选择一个用户流,然后选择“运行用户流”。
对于“应用程序”,请选择前面已注册的名为 webapp1 的 Web 应用程序。 “回复 URL”应显示为 。
复制“运行用户流终结点”下的 URL。
若要使用自定义域模拟登录,请打开 Web 浏览器并使用复制的 URL。 将 Azure AD B2C 域 (<tenant-name.b2clogin.com>) 替换为自定义域。
例如,而不是:
https://contoso.b2clogin.com/contoso.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_susi&client_id=00001111-aaaa-2222-bbbb-3333cccc4444&nonce=defaultNonce&redirect_uri=https%3A%2F%2Fjwt.ms&scope=openid&response_type=id_token&prompt=login
而是使用:
https://login.contoso.com/contoso.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_susi&client_id=00001111-aaaa-2222-bbbb-3333cccc4444&nonce=defaultNonce&redirect_uri=https%3A%2F%2Fjwt.ms&scope=openid&response_type=id_token&prompt=login
验证 Azure AD B2C 是否已正确加载。 然后使用本地帐户登录。
对其余策略重复测试。
配置您的身份验证提供商
当用户选择使用社交标识提供者登录时,Azure AD B2C 会启动授权请求,并将用户带到所选标识提供者以完成登录过程。 授权请求将为 redirect_uri
指定 Azure AD B2C 默认域名:
https://<tenant-name>.b2clogin.com/<tenant-name>/oauth2/authresp
如果您将策略配置为允许使用外部身份提供商登录,请使用自定义域更新 OAuth 重定向 URI。 大多数身份提供商都允许您注册多个重定向 URI。 我们建议添加重定向 URI,而不是替换它们,以便您可以测试自定义策略,而不会影响使用 Azure AD B2C 默认域名的应用程序。
在以下重定向 URI 中:
https://<custom-domain-name>/<tenant-name>/oauth2/authresp
- 将 <
custom-domain-name
> 替换为您的自定义域名。 - 替换为 <
tenant-name
> 您的租户名称或租户 ID。
以下示例显示了有效的 OAuth 重定向 URI:
https://login.contoso.com/contoso.onmicrosoft.com/oauth2/authresp
SAML 身份提供商元数据将类似于以下示例:
https://<custom-domain-name>.b2clogin.com/<tenant-name>/<your-policy>/samlp/metadata?idptp=<your-technical-profile>
配置应用程序
配置和测试自定义域后,可以更新应用程序以加载将自定义域指定为主机名的 URL,而不是 Azure AD B2C 域。
自定义域集成适用于身份验证终结点,它们使用 Azure AD B2C 策略(用户流或自定义策略)对用户进行身份验证。 这些终端节点可能类似于以下示例:
https://<custom-domain>/<tenant-name>/<policy-name>/v2.0/.well-known/openid-configuration
https://<custom-domain>/<tenant-name>/<policy-name>/oauth2/v2.0/authorize
https://<custom-domain>/<tenant-name>/<policy-name>/oauth2/v2.0/token
替换为:
-
<
custom-domain
将 > 替换为自定义域 -
<
tenant-name
将 > 替换为你的租户名称或租户 ID -
<
policy-name
将 > 替换为你的策略名称。
SAML 服务提供商元数据可能类似于以下示例:
https://custom-domain-name/tenant-name/policy-name/Samlp/metadata
(可选)使用租户 ID
您可以将 URL 中的 B2C 租户名称替换为租户 ID GUID,以便删除 URL 中对“b2c”的所有引用。 您可以在 Azure 门户的 B2C 概述页中找到租户 ID GUID。
例如,将 https://account.contosobank.co.uk/contosobank.onmicrosoft.com/
更改为 https://account.contosobank.co.uk/<tenant ID GUID>/
如果选择使用租户 ID 而不是租户名称,请确保相应地更新标识提供者的 OAuth 重定向 URI。 使用租户 ID 而不是租户名称时,有效的 OAuth 重定向 URI 将类似于以下示例:
https://login.contoso.com/11111111-1111-1111-1111-111111111111/oauth2/authresp
有关更多信息,请参阅 配置您的身份提供商。
代币发行
令牌颁发者名称 (iss) 声明根据所使用的自定义域而进行变化。 例如:
https://<domain-name>/11111111-1111-1111-1111-111111111111/v2.0/
(可选)Azure Front Door 高级配置
可以使用 Azure Front Door 高级配置,例如 Azure Web 应用程序防火墙 (WAF)。 Azure WAF 可在出现常见攻击和漏洞时为 Web 应用程序提供集中保护。
使用自定义域时,请注意以下几点:
- WAF 策略必须与 Azure Front Door 配置文件位于同一个层。 若要详细了解如何创建 WAF 策略以用于 Azure Front Door,请参阅配置 WAF 策略。
- WAF 托管规则功能不受官方支持,因为它可能会导致误报并阻止合法请求通过,因此请仅使用符合需求的 WAF 自定义规则。
故障排除
Azure AD B2C 返回“找不到页面”错误
- 症状 - 您配置了自定义域,但当您尝试使用自定义域登录时,收到 HTTP 404 错误消息。
- 可能的原因 - 此问题可能与 DNS 配置或 Azure Front Door 后端配置有关。
- 解决方法:
我们的服务目前不可用
症状 - 您配置了自定义域,但当您尝试使用自定义域登录时,您会收到以下错误消息: 我们的服务现在不可用。我们正在努力尽快恢复所有服务。请稍后回来查看。
可能的原因 - 此问题可能与 Azure Front Door 路由配置有关。
解决方法:检查 default-route 的状态。 如果已禁用,则 启用路由。 以下截图显示了 default-route 所应呈现的样子:
Azure AD B2C 返回要查找的资源已被删除、名称已更改或暂时不可用。
- 症状 - 配置了自定义域,但尝试使用自定义域登录时,收到 要查找的资源已被删除、名称已更改或暂时不可用 错误消息。
- 可能的原因 - 此问题可能与 Microsoft Entra 自定义域验证有关。
- 解决方法:确保在 Azure AD B2C 租户中 注册并 成功验证 自定义域。
标识提供者返回错误
- 症状 - 配置自定义域后,可以使用本地帐户登录。 但是,当您使用来自外部 社交或企业身份提供商的凭据登录时,身份提供商会显示错误消息。
- 可能的原因 - 当 Azure AD B2C 要求用户使用联合标识提供者登录时,它会指定重定向 URI。 重定向 URI 是身份提供商返回令牌的终端节点。 重定向 URI 是应用程序用于授权请求的同一域。 如果重定向 URI 尚未在身份提供商中注册,则它可能不信任新的重定向 URI,这会导致错误消息。
- 解决方案 - 按照 配置身份提供商 中的步骤添加新的重定向 URI。
常见问题
当我使用 Run Now 尝试运行我的策略时,为什么我看不到自定义域?
复制 URL,手动更改域名,然后将其粘贴回浏览器。
对于 Azure AD B2C 显示哪个 IP 地址? 用户的 IP 地址,还是 Azure Front Door 的 IP 地址?
Azure Front Door 传递用户的原始 IP 地址。 它是您在审核报告或自定义策略中看到的 IP 地址。
重要
如果客户端向 Azure Front Door 发送 x-forwarded-for
标头,Azure AD B2C 将使用发起方 x-forwarded-for
的 IP 地址作为 条件访问评估 和 {Context:IPAddress}
声明解析程序的用户 IP 地址。
是否可以将第三方 Web 应用程序防火墙 (WAF) 与 B2C 一起使用?
是的,Azure AD B2C 支持 BYO-WAF(自带 Web 应用程序防火墙)。 但是,您必须测试 WAF,以确保它不会阻止或报警那些对 Azure AD B2C 用户流或自定义策略的合法请求。 了解如何使用 Azure AD B2C 配置 Akamai WAF 和 Cloudflare WAF 。
我的 Azure Front Door 实例是否可以托管在与我的 Azure AD B2C 租户不同的订阅中?
是的,Azure Front Door 可以位于不同的订阅中。
相关内容
- 了解有关 OAuth 授权请求的信息。
- 了解 OpenID Connect 授权请求。
- 了解 授权代码流。