Important
自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息。
在开始之前,请使用此页面顶部的 “选择策略类型 选择器”来选择要设置的策略类型。 Azure Active Directory B2C 提供了两种定义用户如何与应用程序交互的方法:通过预定义的用户流,或者通过可完全配置的自定义策略。 对于每种方法,本文中所需的步骤都不同。
注释
请注意,世纪互联运营的Microsoft Azure仅支持自定义域的自定义策略。 有关详细信息,请参阅 开发人员说明。
本文介绍如何在 Azure Active Directory B2C(Azure AD B2C)的重定向 URL 中启用自定义域。 使用已验证的自定义域具有以下优势:
它提供了更无缝的用户体验。 从用户的角度来看,他们在登录过程中始终停留在您的域内,而不是被重定向到 Azure AD B2C 的默认域 <tenant-name>.b2clogin.cn。
通过在登录期间让应用始终位于同一域名下,可以减轻 第三方 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 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.cn默认域调用 Azure AD B2C 内容。 对 Azure AD B2C 终结点的请求包括原始自定义域名。 - Azure AD B2C 通过显示相关内容和原始自定义域来响应请求。
Important
从浏览器到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.cn>。 你需要阻止对默认域的访问,以便攻击者无法使用它访问应用或运行分布式拒绝服务 (DDoS) 攻击。 提交支持票证以请求阻止对默认域的访问。
Warning
在自定义域正常工作之前,请勿请求阻止默认域。
先决条件
- 创建用户流,以便用户能够注册并登录应用程序。
- 注册 Web 应用程序。
- 完成 在 Active Directory B2C 中开始使用自定义策略中的步骤。 本教程指导你如何更新自定义策略文件以使用 Azure AD B2C 租户配置。
- 注册 Web 应用程序。
步骤 1:将自定义域名添加至您的 Azure AD B2C 租户
创建 Azure AD B2C 租户时,它附带了初始域名 <domainname.partner.onmschina.cn>。 无法更改或删除初始域名,但可以添加自己的自定义域。
按照以下步骤将自定义域添加到 Azure AD B2C 租户:
-
Important
对于这些步骤,请务必登录到 Azure AD B2C 租户并选择Microsoft Entra ID服务。
将 DNS 信息添加到域注册机构。 将自定义域名添加到Microsoft Entra ID后,请为域创建 DNS
TXT或MX记录。 为域创建此 DNS 记录可以验证域名的所有权。以下示例演示 login.contoso.com 和 account.contoso.com 的 TXT 记录:
名称(主机名) 类型 Data login TXT MS=ms12345678 帐户 TXT MS=ms87654321 TXT 记录必须与域的子域或主机名相关联。 例如,contoso.com 域的登录部分。 如果主机名为空或
@Microsoft Entra ID将无法验证添加的自定义域。 在以下示例中,这两条记录配置不正确。名称(主机名) 类型 Data TXT MS=ms12345678 @ TXT MS=ms12345678 Tip
可以使用任何公开可用的 DNS 服务(如 GoDaddy)管理自定义域。 如果没有 DNS 服务器,可以使用Azure DNS区域。
验证自定义域名。 验证计划使用的每个子域或主机名。 例如,为了能够通过 login.contoso.com 和 account.contoso.com 登录,需要验证这两个子域,而不只是顶级域 contoso.com。
Important
验证域后, 删除 创建的 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:
Key Value 订阅 选择您的 Azure 订阅。 资源组 选择现有的资源组,或创建一个新的组。 Name 为配置文件命名,例如 b2cazurefrontdoor。Tier 选择“标准”或“高级”层。 标准层在内容传送方面经过优化。 高级层构建于标准层的基础之上,更注重安全性。 请参阅层级比较。 端点名称 为终结点输入全局唯一的名称,例如 b2cazurefrontdoor。 “终结点主机名”将自动生成。来源类型 选择 Custom。源主机名 输入 <tenant-name>.b2clogin.cn。 将<tenant-name>替换为 你的 Azure AD B2C 租户名称,例如contoso.b2clogin.cn。将 缓存 和 WAF 策略 保留为空。
创建Azure Front Door资源后,选择“概述”,然后复制终结点主机名。 你稍后会用到这个。 它类似于
b2cazurefrontdoor-ab123e.z01.azurefd.net。确保源的“主机名”和“源主机头”具有相同的值:
- 在“设置”下,选择“源组”。
- 从列表中选择源组,例如 default-origin-group。
- 在右侧窗格中,选择“源主机名”,例如
contoso.b2clogin.cn。 - 在“更新源”窗格中,更新“主机名”和“源主机头”,使其具有相同的值。
步骤 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。
若要创建自定义域的 CNAME 记录,请执行以下操作:
登录到你的自定义域的域提供商的网站。
通过咨询提供商的文档或搜索标记为 域名、 DNS 或 名称服务器管理的网站区域,查找用于管理 DNS 记录的页面。
为自定义域创建 CNAME 记录条目并完成字段,如下表所示(字段名称可能有所不同):
Source 类型 目的地 <login.contoso.com>CNAME contoso-frontend.azurefd.net源:输入自定义域名(例如,login.contoso.com)。
类型:输入 CNAME。
目标:输入在 步骤 2 中创建的默认 Front Door 前端主机。 必须采用<主机名>.azurefd.net 格式。 例如,
contoso-frontend.azurefd.net。
保存所做的更改。
3.2. 将自定义域名与 Azure Front Door 关联起来
在 Azure 门户主页中搜索
myb2cazurefrontdoorAzure Front Door 资源,并将其选中以将其打开。在左侧菜单中的“设置”下,选择“域”。
选择“添加域”。
对于“DNS 管理”,请选择“所有其他 DNS 服务”。
对于“自定义域”,请输入你的自定义域,例如
login.contoso.com。将其他值保留默认值,然后选择“添加”。 你的自定义域随即会添加到列表中。
在刚刚添加的域的“验证状态”下,选择“等待中”。 此时会打开一个包含 TXT 记录信息的窗格。
登录到你的自定义域的域提供商的网站。
通过咨询提供商的文档或搜索标记为 域名、 DNS 或 名称服务器管理的网站区域,查找用于管理 DNS 记录的页面。
新建一个 TXT DNS 记录,并按如下所示填写各字段:
- 名称:
_dnsauth.login.contoso.com,但只需输入_dnsauth。 - 类型:
TXT - 值:类似
75abc123t48y2qrtsz2bvk......。
添加 TXT DNS 记录后,Front Door 资源中的“验证状态”最终将从“等待中”更改为“已批准”。 可能需要重新加载页面才能发生更改。
- 名称:
返回到Azure门户。 在刚刚添加的域的“终结点关联”下,选择“未关联”。
对于“选择终结点”,请从下拉列表中选择主机名终结点。
对于“选择路由”列表,请选择“default-route”,然后选择“关联”。
3.3. 启用路由
default-route 将流量从客户端路由到 Azure Front Door。 然后,Azure Front Door使用配置将流量发送到 Azure AD B2C。 按照以下步骤启用默认路由。
选择“Front Door 管理器”。
若要启用 default-route,请首先从 Front Door 管理器中的终结点列表中展开某个终结点。 然后选择 default-route。
以下屏幕截图显示了如何选择默认路由。
选中“ 启用路由 ”复选框。
选择“更新”以保存更改。
步骤 4:配置 CORS
如果使用自定义 HTML 模板自定义 Azure AD B2C 用户界面,则需要使用自定义域配置 CORS。
使用以下步骤为跨域资源共享配置 Azure Blob 存储:
- 在 Azure 门户中导航到存储帐户。
- 在菜单中,选择 CORS。
- 请在“允许的源”中输入。 将
your-domain-name替换为你的域名。 例如,https://login.contoso.com。 输入租户名称时全部使用小写字母。 - 对于<允许的方法>,请同时选择
和 。 - 对于“Allowed Headers”,请输入一个星号 (*)。
- 对于“暴露的标头”,请输入一个星号 (*)。
- 对于“最大年龄”,请输入 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.cn>)替换为自定义域。
例如,不要这样说:
https://contoso.b2clogin.cn/contoso.partner.onmschina.cn/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.partner.onmschina.cn/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 启动授权请求,并将用户转到所选标识提供者来完成登录过程。 授权请求指定了使用 Azure AD B2C 默认域名的 redirect_uri:
https://<tenant-name>.b2clogin.cn/<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.partner.onmschina.cn/oauth2/authresp
SAML 标识提供者元数据如以下示例所示:
https://<custom-domain-name>.b2clogin.cn/<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-configurationhttps://<custom-domain>/<tenant-name>/<policy-name>/oauth2/v2.0/authorizehttps://<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.partner.onmschina.cn/ 更改为 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 自定义规则。
Troubleshooting
Azure AD B2C 返回“找不到页面”错误
- 症状 - 配置自定义域,但在尝试使用自定义域登录时,会收到 HTTP 404 错误消息。
- 可能的原因 - 此问题可能与 DNS 配置或Azure Front Door后端配置相关。
-
解决方法:
- 请确保在 Azure AD B2C 租户中注册并成功验证自定义域。
- 请确保已正确配置自定义域。 自定义域的
CNAME记录必须指向 Azure Front Door 默认的前端主机(例如 contoso-frontend.azurefd.net)。
我们的服务目前不可用
症状 - 配置自定义域,但在尝试使用自定义域登录时,会收到以下错误消息: 我们的服务目前不可用。我们正在努力尽快还原所有服务。请很快回来查看。
可能的原因 - 此问题可能与Azure Front Door路由配置相关。
解决方法:检查 默认路由的状态。 如果该路由已被禁用,请启用该路由。 以下屏幕截图显示了默认路由的外观:
Azure AD B2C 返回要查找的资源已被删除、名称更改或暂时不可用。
- 症状 - 配置自定义域,但尝试使用自定义域登录时,会获取 要查找的资源已被删除、名称已更改或暂时不可用 的错误消息。
- 可能的原因 - 此问题可能与Microsoft Entra自定义域验证相关。
- 解决方法:请确保在 Azure AD B2C 租户中注册并成功验证自定义域。
身份提供商返回错误
- 症状 - 配置自定义域后,可以使用本地帐户登录。 但是,当你使用来自外部 社交或企业标识提供者的凭据登录时,标识提供者会显示一条错误消息。
- 可能的原因 - Azure AD B2C 使用户使用联合标识提供者登录时,它指定重定向 URI。 重定向 URI 是标识提供者返回令牌的终结点。 重定向 URI 与应用程序在授权请求中使用的域相同。 如果标识提供者中尚未注册重定向 URI,则它可能不信任新的重定向 URI,这会导致错误消息。
- 解决方法 - 按照 配置标识提供者 中的步骤添加新的重定向 URI。
常见问题解答
当我使用“立即运行”尝试运行策略时,为什么看不到自定义域?
复制 URL,手动更改域名,然后将其粘贴回浏览器。
呈现给 Azure AD B2C 的是哪个 IP 地址? 是用户的 IP 地址,还是 Azure Front Door IP 地址?
Azure Front Door传递用户的原始 IP 地址。 它是你在审核报告或自定义策略中看到的 IP 地址。
Important
如果客户端向 Azure Front Door 发送 x-forwarded-for 标头,Azure AD B2C 会将发起方的 x-forwarded-for 用作用户的 IP 地址,以用于条件访问评估和 {Context:IPAddress}声明解析程序。
是否可以将第三方Web 应用程序防火墙 (WAF) 与 B2C 配合使用?
是的,Azure AD B2C 支持 BYO-WAF(自带Web 应用程序防火墙)。 但是,必须对 WAF 进行测试,以确保它不会阻止针对 Azure AD B2C 用户流或自定义策略的合法请求,也不会对其发出警报。
我的Azure Front Door实例是否可以托管在与 Azure AD B2C 租户不同的订阅中?
是的,Azure Front Door可以位于不同的订阅中。
相关内容
- 了解 OAuth 授权请求。
- 了解 OpenID Connect 授权请求。
- 了解 授权代码流。