开始之前,请使用此页顶部的“选择策略类型”选择器来选择要设置的策略类型。 Azure Active Directory B2C 提供了两种定义用户如何与应用程序交互的方法:通过预定义的用户流,或者通过可完全配置的自定义策略。 对于每种方法,本文中所需的步骤都不同。
此功能仅适用于自定义策略。 对于设置步骤,请在前面的选择器中选择“自定义策略”。
本文介绍如何使用 Microsoft Entra ID 的多租户终结点为用户启用登录,从而允许来自多个 Microsoft Entra 租户的用户使用 Azure AD B2C 登录,而无需为每个租户配置标识提供者。 但是,任何这些租户中的来宾成员都将无法登录。 为此,你需要单独配置每个租户。
- 创建用户流,以便用户能够注册并登录应用程序。
- 注册 Web 应用程序。
- 完成 Active Directory B2C 中的自定义策略入门中的步骤。 本教程指导你如何更新自定义策略文件以使用 Azure AD B2C 租户配置。
- 注册 Web 应用程序。
备注
在本文中,假设在先决条件中提到的前述步骤中使用了 SocialAndLocalAccounts 初学者包。
若要使用户能够使用 Microsoft Entra 帐户登录到 Azure AD B2C,首先需要从 Azure 门户在 Microsoft Entra 租户中创建应用程序。 有关详细信息,请参阅将应用程序注册到 Microsoft 标识平台。
登录 Azure 门户。
如果有权访问多个租户,请选择顶部菜单中的“设置”图标,以便从“目录 + 订阅”菜单切换到 Microsoft Entra 租户。
选择 Azure 门户左上角的“所有服务”,然后搜索并选择“应用注册” 。
选择“新注册”。
输入应用程序的名称。 例如
Azure AD B2C App
。为此应用程序选择“任何组织目录(任何 Microsoft Entra 目录 - 多租户)中的帐户”。
对于“重定向 URI”,接受值 Web,并以全小写字母输入以下 URL,其中
your-B2C-tenant-name
将替换为 Azure AD B2C 租户的名称。https://your-B2C-tenant-name.b2clogin.cn/your-B2C-tenant-name.partner.onmschina.cn/oauth2/authresp
例如,
https://fabrikam.b2clogin.cn/fabrikam.partner.onmschina.cn/oauth2/authresp
。选择“注册”。 记录“应用程序(客户端) ID”,以便在后续步骤中使用。
选择证书和机密,然后选择新建客户端密码。
为机密输入说明,选择到期时间,然后选择“添加”。 记录机密的值,以便在后续步骤中使用。
备注
此后,客户端密码将不会再次显示。 如果不记录它,则必须创建新的客户端密码。
如果要从 Microsoft Entra ID 获取 family_name
和 given_name
声明,可以在 Azure 门户 UI 或应用程序清单中为应用程序配置可选声明。 有关详细信息,请参阅如何向 Microsoft Entra 应用提供可选声明。
- 登录 Azure 门户。 搜索并选择 Microsoft Entra ID。
- 从“管理”部分中选择“应用注册” 。
- 在列表中选择要为其配置可选声明的应用程序。
- 在“管理”部分中,选择“令牌配置”。
- 选择“添加可选声明”。
- 对于“令牌类型”,选择“ID”。
- 选择要添加的可选声明:
family_name
和given_name
。 - 选择“添加” 。 如果出现“打开 Microsoft Graph 电子邮件权限(在令牌中显示声明所需)”,请启用它,然后再次选择“添加”。
现在需要将创建的应用程序密钥存储在 Azure AD B2C 租户中。
- 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Azure AD B2C 租户。
- 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
- 在“策略”下,选择“Identity Experience Framework”。
- 选择“策略密钥”,然后选择“添加”。
- 对于“选项”,请选择
Manual
。 - 输入策略密钥的名称。 例如,
AADAppSecret
。 前缀B2C_1A_
会在创建密钥时自动添加到密钥的名称,因此它在以下部分的 XML 中的引用是 B2C_1A_AADAppSecret。 - 在“机密”中,输入你之前记录的客户端密码。
- 在“密钥用法”处选择
Signature
。 - 选择“创建”。
若要让用户使用 Microsoft Entra 帐户登录,需要将 Microsoft Entra ID 定义为 Azure AD B2C 可通过终结点与其进行通信的声明提供程序。 该终结点将提供一组声明,Azure AD B2C 使用这些声明来验证特定的用户是否已完成身份验证。
通过在策略的扩展文件中将 Microsoft Entra ID 添加到 ClaimsProvider 元素,可以将 Microsoft Entra ID 定义为声明提供程序。
打开 SocialAndLocalAccounts/TrustFrameworkExtensions.xml 文件(请参阅在先决条件中使用的文件)。
找到 ClaimsProviders 元素。 如果该元素不存在,请在根元素下添加它。
如下所示添加新的 ClaimsProvider:
<ClaimsProvider> <Domain>commonaad</Domain> <DisplayName>Common AAD</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="AADCommon-OpenIdConnect"> <DisplayName>Multi-Tenant AAD</DisplayName> <Description>Login with your Contoso account</Description> <Protocol Name="OpenIdConnect"/> <Metadata> <Item Key="METADATA">https://login.partner.microsoftonline.cn/common/v2.0/.well-known/openid-configuration</Item> <!-- Update the Client ID below to the Application ID --> <Item Key="client_id">00001111-aaaa-2222-bbbb-3333cccc4444</Item> <Item Key="response_types">code</Item> <Item Key="scope">openid profile</Item> <Item Key="response_mode">form_post</Item> <Item Key="HttpBinding">POST</Item> <Item Key="UsePolicyInRedirectUri">false</Item> <Item Key="DiscoverMetadataByTokenIssuer">true</Item> <!-- The key below allows you to specify each of the Azure AD tenants that can be used to sign in. Update the GUIDs below for each tenant. --> <Item Key="ValidTokenIssuerPrefixes">https://login.partner.microsoftonline.cn/00000000-0000-0000-0000-000000000000,https://login.partner.microsoftonline.cn/11111111-1111-1111-1111-111111111111</Item> <!-- The commented key below specifies that users from any tenant can sign-in. Uncomment if you would like anyone with an Azure AD account to be able to sign in. --> <!-- <Item Key="ValidTokenIssuerPrefixes">https://login.partner.microsoftonline.cn/</Item> --> </Metadata> <CryptographicKeys> <Key Id="client_secret" StorageReferenceId="B2C_1A_AADAppSecret"/> </CryptographicKeys> <OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="oid"/> <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" /> <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" /> <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" /> <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/> <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/> <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/> <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
在 ClaimsProvider 元素下,将 Domain 的值更新为可用于与其他标识提供者进行区分的唯一值。
在 TechnicalProfile 元素下,更新 DisplayName 的值,例如
Multi-Tenant AAD
。 此值会显示在登录页中的登录按钮上。将 client_id 设置为你之前注册的 Microsoft Entra 多租户应用程序的应用程序 ID。
在“CryptographicKeys”下,将“StorageReferenceId”的值更新为之前创建的策略密钥的名称。 例如
B2C_1A_AADAppSecret
。
使用 https://login.partner.microsoftonline.cn/
作为 ValidTokenIssuerPrefixes 的值后,将允许所有 Microsoft Entra 用户登录到你的应用程序。 更新有效令牌颁发者列表,并且仅允许可以登录的一组特定 Microsoft Entra 租户用户进行访问。
若要获取值,请查看你希望让用户从其登录的每个 Microsoft Entra 租户的 OpenID Connect 发现元数据。 元数据 URL 的格式类似于 https://login.partner.microsoftonline.cn/your-tenant/v2.0/.well-known/openid-configuration
,其中 your-tenant
为你的 Microsoft Entra 租户名称。 例如:
https://login.partner.microsoftonline.cn/fabrikam.partner.onmschina.cn/v2.0/.well-known/openid-configuration
对每个应该用于登录的 Microsoft Entra 租户执行以下步骤:
- 为该租户打开浏览器并转到 OpenID Connect 元数据 URL。 查找
issuer
对象,然后记录其值。 它看起来应该类似于https://login.partner.microsoftonline.cn/ aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0
。 - 复制并粘贴该值到 ValidTokenIssuerPrefixes 密钥。 多个证书颁发者以逗号隔开。 之前的
ClaimsProvider
XML 示例中显示了一个出现两位证书颁发者的示例。
此时,标识提供者已设置,但还不能在任何登录页中使用。 如果你没有自己的自定义用户旅程,请创建现有模板用户旅程的副本,否则,请继续执行下一步。
- 打开初学者包中的 TrustFrameworkBase.xml 文件。
- 找到并复制包含
Id="SignUpOrSignIn"
的 UserJourney 元素的完整内容。 - 打开 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="AzureADCommonExchange" />
</ClaimsProviderSelections>
...
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
...
<ClaimsExchanges>
<ClaimsExchange Id="AzureADCommonExchange" TechnicalProfileReferenceId="AADCommon-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
),然后上传信赖方策略(例如SignUpSignIn.xml
)。
- 选择信赖方策略,例如
B2C_1A_signup_signin
。 - 对于“应用程序”,请选择前面注册的 Web 应用程序。 “回复 URL”应显示为
https://jwt.ms
。 - 选择“立即运行”按钮。
- 在注册或登录页面上,选择“通用 Microsoft Entra ID”以使用 Microsoft Entra 帐户登录。
若要测试多租户登录功能,请使用存在于另一个 Microsoft Entra 租户中的用户的凭据执行最后两个步骤。 复制“立即运行终结点”,然后在私密浏览器窗口中将其打开,例如,在 Google Chrome 中打开 Incognito Mode 或在 Microsoft Edge 中打开 InPrivate 窗口。 通过在私密浏览器窗口中打开,你可以不使用任何当前缓存的 Microsoft Entra 凭据测试整个用户历程。
如果登录过程成功,浏览器将重定向到 https://jwt.ms
,后者显示 Azure AD B2C 返回的令牌内容。
- 了解如何将 Microsoft Entra 令牌传递给应用程序。
- 查看 Microsoft Entra 多租户联合身份验证实时演示,以及如何传递 Microsoft Entra 访问令牌实时演示