你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息。
在开始之前,请使用此页面顶部的 “选择策略类型 选择器”来选择要设置的策略类型。 Azure Active Directory B2C 提供了两种定义用户如何与应用程序交互的方法:通过预定义的用户流,或者通过可完全配置的自定义策略。 对于每种方法,本文中所需的步骤都不同。
注释
在 Azure Active Directory B2C 中,自定义策略 主要用于解决复杂场景。 对于大多数场景,我们建议您使用内置的用户流。 如果未这样做,请通过 Active Directory B2C 中的自定义策略入门来了解自定义策略初学者包。
概述
本文介绍如何与另一个 Azure AD B2C 租户设置联盟。 当应用程序使用 Azure AD B2C 进行保护时,这允许来自其他 Azure AD B2C 的用户使用其现有帐户登录。 在下图中,用户可以使用 Fabrikam 的 Azure AD B2C 租户管理的帐户登录到受 Contoso 的 Azure AD B2C 保护的应用程序。 在这种情况下,用户帐户必须存在于 Fabrikam 的租户中,然后 Contoso 的 Azure AD B2C 保护的应用程序才能尝试登录。
先决条件
- 创建用户流,以便用户能够注册并登录应用程序。
- 注册 Web 应用程序。
- 完成 Active Directory B2C 中的自定义策略入门中的步骤。 本教程指导你如何更新自定义策略文件以使用 Azure AD B2C 租户配置。
- 注册 Web 应用程序。
验证应用程序的发布者域
自 2020 年 11 月起,新应用程序注册在用户同意提示中显示为未验证,除非已验证应用程序的发布者域,并且公司的身份已通过Microsoft合作伙伴网络进行验证并与应用程序关联。 (详细了解此更改。)请注意,对于 Azure AD B2C 用户流,发布者域仅在使用 Microsoft 帐户或其他 Microsoft Entra 租户作为标识提供者时才会显示。 若要满足这些新要求,请执行以下作:
- 使用 Microsoft 合作伙伴网络 (MPN) 帐户验证公司标识。 此过程会验证有关贵公司和贵公司主要联系人的信息。
- 使用以下选项之一完成发布者验证过程,以便将 MPN 帐户与应用注册相关联:
- 如果 Microsoft 帐户标识提供者的应用注册是在 Microsoft Entra 租户中,请在应用注册门户中验证应用。
- 如果 Microsoft 帐户标识提供者的应用注册在 Azure AD B2C 租户中,请使用 Microsoft Graph API(例如 Graph 浏览器)将应用标记为已验证的发布者。 用于设置应用的已验证发布者的 UI 当前已对 Azure AD B2C 租户禁用。
创建 Azure AD B2C 应用程序
若要在你的 Azure AD B2C(例如 Contoso)中启用来自另一个 Azure AD B2C 租户(例如 Fabrikam)的帐户的用户的登录功能,请按照以下步骤操作:
创建应用程序。
登录到 Azure 门户。
如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
在 Azure 门户中,搜索并选择 Azure AD B2C。
选择“应用注册”,然后选择“新建注册”。
输入应用程序的“名称”。 例如 ,ContosoApp。
在“支持的帐户类型”下,选择“任何标识提供者或组织目录中的帐户(用于通过用户流对用户进行身份验证)”。
在 “重定向 URI”下,选择 “Web”,然后在所有小写字母中输入以下 URL,其中
your-B2C-tenant-name
替换为 Azure AD B2C 租户的名称(例如 Contoso)。https://your-B2C-tenant-name.b2clogin.com/your-B2C-tenant-name.onmicrosoft.com/oauth2/authresp
例如,
https://contoso.b2clogin.com/contoso.onmicrosoft.com/oauth2/authresp
。如果使用 自定义域,请输入
https://your-___domain-name/your-tenant-name.onmicrosoft.com/oauth2/authresp
。 将your-___domain-name
替换为自定义域,your-tenant-name
替换为租户的名称。在“权限”下,选中 “授予管理员同意 OpenID 和 offline_access 权限” 复选框。
选择“注册”。
在 Azure AD B2C - 应用注册 页中,选择创建的应用程序,例如 ContosoApp。
记录应用程序概述页上显示 的应用程序(客户端)ID 。 在下一部分中配置标识提供者时,需要用到此项。
在左侧菜单中的“管理”下,选择“证书和机密”。
选择 新客户端密码。
在“说明”框中输入客户端密码的说明。 例如,clientsecret1。
在“过期时间”下,选择机密持续生效的时间,然后选择“添加”。
记下机密的“值”。 在下一部分中配置标识提供者时,需要用到此项。
将 Azure AD B2C 配置为标识提供者
登录到 Azure 门户。
如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
选择“标识提供程序”,然后选择“新建 OpenID Connect 提供程序” 。
输入“名称”。 例如,输入 Fabrikam。
对于“元数据 URL”,输入以下 URL,并将
{tenant}
替换为 Azure AD B2C 租户的域名(例如,Fabrikam)。 将{policy}
替换为你在其他租户中配置的策略名称:https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/v2.0/.well-known/openid-configuration
例如,
https://fabrikam.b2clogin.com/fabrikam.onmicrosoft.com/B2C_1_susi/v2.0/.well-known/openid-configuration
。对于 客户端 ID,请输入之前记录的应用程序 ID。
对于 客户端密码,请输入之前记录的客户端密码。
对于“范围”,请输入 。
保留响应类型和响应模式的默认值。
(可选)对于 域提示,输入要用于 直接登录的域名。 例如, fabrikam.com。
在“标识提供者声明映射”下,选择以下声明:
- 用户 ID:sub
- 显示名称:name
- 给定名称: given_name
- 姓氏: family_name
- 电子邮件: 电子邮件
选择“保存”。
将 Azure AD B2C 标识提供者添加到用户流
- 在 Azure AD B2C 租户中,选择“用户流” 。
- 单击要添加 Azure AD B2C 标识提供者的用户流。
- 在 社交标识提供者下,选择 Fabrikam。
- 选择“保存”。
- 若要测试策略,请选择“运行用户流”。
- 对于“应用程序”,请选择前面已注册的名为“testapp1”的 Web 应用程序。 “回复 URL”应显示为
https://jwt.ms
。 - 选择“运行用户流”按钮。
- 在注册或登录页中,选择 Fabrikam 以与其他 Azure AD B2C 租户登录。
如果登录过程成功,浏览器将重定向到 https://jwt.ms
,后者显示 Azure AD B2C 返回的令牌内容。
创建策略密钥
需要存储之前在 Azure AD B2C 租户中创建的应用程序密钥。
- 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
- 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
- 在“策略”下,选择“Identity Experience Framework”。
- 选择“策略密钥”,然后选择“添加”。
- 对于“选项”,选择 。
Manual
- 输入策略密钥的名称。 例如,
FabrikamAppSecret
。 创建密钥时,前缀B2C_1A_
会自动添加到密钥名称中,因此在接下来的部分中,XML 中对密钥的引用为 B2C_1A_FabrikamAppSecret。 - 在“机密”中,输入你之前记录的客户端密码。
- 在“密钥用法”处选择 。
- 选择 创建。
将 Azure AD B2C 配置为标识提供者
若要允许用户使用另一个 Azure AD B2C 租户 (Fabrikam) 中的帐户进行登录,则需将其他 Azure AD B2C 定义为 Azure AD B2C 可通过终结点与其进行通信的声明提供程序。 该终结点将提供一组声明,Azure AD B2C 使用这些声明来验证特定的用户是否已完成身份验证。
可以通过将 Azure AD B2C 添加到策略扩展文件中 的 ClaimsProvider 元素,将 Azure AD B2C 定义为声明提供程序。
打开 TrustFrameworkExtensions.xml 文件。
找到 ClaimsProviders 元素。 如果该元素不存在,请在根元素下添加它。
添加一个新的 ClaimsProvider,如下所示:
<ClaimsProvider> <Domain>fabrikam.com</Domain> <DisplayName>Federation with Fabrikam tenant</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="AzureADB2CFabrikam-OpenIdConnect"> <DisplayName>Fabrikam</DisplayName> <Protocol Name="OpenIdConnect"/> <Metadata> <!-- Update the Client ID below to the Application ID --> <Item Key="client_id">00001111-aaaa-2222-bbbb-3333cccc4444</Item> <!-- Update the metadata URL with the other Azure AD B2C tenant name and policy name --> <Item Key="METADATA">https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/v2.0/.well-known/openid-configuration</Item> <Item Key="UsePolicyInRedirectUri">false</Item> <Item Key="response_types">code</Item> <Item Key="scope">openid</Item> <Item Key="response_mode">form_post</Item> <Item Key="HttpBinding">POST</Item> </Metadata> <CryptographicKeys> <Key Id="client_secret" StorageReferenceId="B2C_1A_FabrikamAppSecret"/> </CryptographicKeys> <OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" /> <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" /> <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name" /> <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" /> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" /> <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" /> <OutputClaim ClaimTypeReferenceId="otherMails" PartnerClaimType="emails"/> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" /> <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" /> <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" /> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
使用以下 XML 元素更新相关值:
XML 元素 价值 ClaimsProvider\域 用于 直接登录的域名。 输入要在直接登录中使用的域名。 例如, fabrikam.com。 TechnicalProfile\DisplayName 此值将显示在登录屏幕上的登录按钮上。 例如 ,Fabrikam。 元数据\client_id 身份验证提供者的应用程序标识符。 使用之前在其他 Azure AD B2C 租户中创建的应用程序 ID 更新客户端 ID。 元数据\元数据 指向 OpenID Connect 标识提供者配置文档的 URL,也称为 OpenID 已知配置终结点。 输入以下 URL,用其他 Azure AD B2C 租户的域名(例如 Fabrikam)替换 {tenant}
。 将{tenant}
替换为另一租户中配置的策略名称,而{policy]
替换为策略名称:https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/v2.0/.well-known/openid-configuration
。 例如,https://fabrikam.b2clogin.com/fabrikam.onmicrosoft.com/B2C_1_susi/v2.0/.well-known/openid-configuration
。加密密钥 将 StorageReferenceId 的值更新为之前创建的策略密钥的名称。 例如, B2C_1A_FabrikamAppSecret
。
添加用户旅程
此时,标识提供者已设置,但还不能在任何登录页中使用。 如果你没有自己的自定义用户旅程,请创建现有模板用户旅程的副本,否则,请继续执行下一步。
- 打开初学者包中的 TrustFrameworkBase.xml 文件。
- 找到并复制包含 的
Id="SignUpOrSignIn"
元素的完整内容。 - 打开 TrustFrameworkExtensions.xml 并找到 UserJourneys 元素。 如果该元素不存在,请添加一个。
- 将您复制的 UserJourney 元素的完整内容粘贴到 UserJourneys 元素下作为其子项。
- 对用户旅程的 ID 进行重命名。 例如,
Id="CustomSignUpSignIn"
。
将标识提供者添加到用户旅程
现在你已拥有用户旅程,请将新的身份提供者添加到用户旅程中。 首先添加一个“登录”按钮,然后将该按钮链接到某个操作。 该操作是前面创建的技术配置文件。
在用户旅程中,查找包含
Type="CombinedSignInAndSignUp"
或Type="ClaimsProviderSelection"
的业务流程步骤元素。 通常这是第一个编排步骤。 ClaimsProviderSelections 元素包含用户可以用来登录的标识提供者列表。 元素的顺序将决定向用户显示的登录按钮的顺序。 添加ClaimsProviderSelection XML 元素。 将 TargetClaimsExchangeId 的值设置为易记名称。在下一个编排步骤中,添加 ClaimsExchange 元素。 将 ID 设为目标声明交换 ID 的值。将 TechnicalProfileReferenceId 的值更新为先前创建的技术配置文件的 ID。
下面的 XML 演示了使用标识提供者进行用户旅程的前两个业务流程步骤:
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
<ClaimsProviderSelections>
...
<ClaimsProviderSelection TargetClaimsExchangeId="AzureADB2CFabrikamExchange" />
</ClaimsProviderSelections>
...
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
...
<ClaimsExchanges>
<ClaimsExchange Id="AzureADB2CFabrikamExchange" TechnicalProfileReferenceId="AzureADB2CFabrikam-OpenIdConnect" />
</ClaimsExchanges>
</OrchestrationStep>
配置信赖方策略
信赖方策略(例如 SignUpSignIn.xml)指定 Azure AD B2C 将执行的用户旅程。 在信赖方内查找 DefaultUserJourney 元素。 更新 ReferenceId,使其与已在其中添加标识提供者的用户旅程 ID 匹配。
在以下示例中,对于 CustomSignUpSignIn
用户旅程,将 ReferenceId 设置为 CustomSignUpSignIn
:
<RelyingParty>
<DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
...
</RelyingParty>
上传自定义策略
- 登录到 Azure 门户。
- 在门户工具栏中选择“目录 + 订阅”图标,然后选择包含 Azure AD B2C 租户的目录。
- 在 Azure 门户中,搜索并选择 Azure AD B2C。
- 在“策略”下,选择“Identity Experience Framework”。
- 选择“上传自定义策略”,然后上传已更改的两个策略文件,其顺序为:先上传扩展策略(例如 ),然后上传信赖方策略(例如
TrustFrameworkExtensions.xml
)。
测试自定义策略
- 选择依赖方策略,例如
B2C_1A_signup_signin
。 - 对于应用程序,请选择您前面注册的 Web 应用程序。 “回复 URL”应显示为
https://jwt.ms
。 - 选择“立即运行”按钮。
- 在注册或登录页中,选择 Fabrikam 以与其他 Azure AD B2C 租户登录。
如果登录过程成功,浏览器将重定向到 https://jwt.ms
,后者显示 Azure AD B2C 返回的令牌内容。