设置使用另一个 Azure AD B2C 租户中的 Azure AD B2C 帐户注册与登录的功能

重要

自 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 保护的应用程序才能尝试登录。

与另一个 Azure AD B2C 租户的 Azure AD B2C 联合身份验证

先决条件

创建 Azure AD B2C 应用程序

若要在你的 Azure AD B2C(例如 Contoso)中启用来自另一个 Azure AD B2C 租户(例如 Fabrikam)的帐户的用户的登录功能,请按照以下步骤操作:

  1. 创建 用户流自定义策略
  2. 然后在 Azure AD B2C 中创建应用程序,如本部分所述。

创建应用程序。

  1. 登录到 Azure 门户

  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。

  3. 在 Azure 门户中,搜索并选择 Azure AD B2C

  4. 选择“应用注册”,然后选择“新建注册”

  5. 为应用程序输入名称。 例如 ,ContosoApp

  6. 在“支持的帐户类型”下,选择“任何标识提供者或组织目录中的帐户(用于通过用户流对用户进行身份验证)”

  7. “重定向 URI”下,选择 “Web”,然后在所有小写字母中输入以下 URL,其中 your-B2C-tenant-name 替换为 Azure AD B2C 租户的名称(例如 Contoso)。

    https://your-B2C-tenant-name.b2clogin.cn/your-B2C-tenant-name.partner.onmschina.cn/oauth2/authresp
    

    例如,https://contoso.b2clogin.cn/contoso.partner.onmschina.cn/oauth2/authresp

  8. 在“权限”下,选中 “授予管理员同意 OpenID 和 offline_access 权限” 复选框。

  9. 选择“注册”。

  10. Azure AD B2C - 应用注册 页中,选择创建的应用程序,例如 ContosoApp

  11. 记录应用程序概述页上显示 的应用程序(客户端)ID 。 在下一部分中配置标识提供者时,需要用到此项。

  12. 在左侧菜单中的“管理”下,选择“证书和机密”

  13. 选择 新客户端密码

  14. 在“说明”框中输入客户端密码的说明。 例如,clientsecret1

  15. 在“过期时间”下,选择机密持续生效的时间,然后选择“添加”。

  16. 记下机密的“值”。 在下一部分中配置标识提供者时,需要用到此项。

将 Azure AD B2C 配置为标识提供者

  1. 登录到 Azure 门户

  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。

  3. 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。

  4. 选择“标识提供程序”,然后选择“新建 OpenID Connect 提供程序” 。

  5. 输入“名称”。 例如,输入 Fabrikam

  6. 对于“元数据 URL”,输入以下 URL,并将 {tenant} 替换为 Azure AD B2C 租户的域名(例如,Fabrikam)。 将 {policy} 替换为你在其他租户中配置的策略名称:

    https://{tenant}.b2clogin.cn/{tenant}.partner.onmschina.cn/{policy}/v2.0/.well-known/openid-configuration
    

    例如,https://fabrikam.b2clogin.cn/fabrikam.partner.onmschina.cn/B2C_1_susi/v2.0/.well-known/openid-configuration

  7. 对于 客户端 ID,请输入之前记录的应用程序 ID。

  8. 对于 客户端密码,请输入之前记录的客户端密码。

  9. 对于“范围”,请输入

  10. 保留响应类型和响应模式的默认值。

  11. (可选)对于 域提示,输入要用于 直接登录的域名。 例如, fabrikam.com

  12. 在“标识提供者声明映射”下,选择以下声明:

    • 用户 IDsub
    • 显示名称:name
    • 给定名称given_name
    • 姓氏family_name
    • 电子邮件电子邮件
  13. 选择“保存”

将 Azure AD B2C 标识提供者添加到用户流

  1. 在 Azure AD B2C 租户中,选择“用户流” 。
  2. 单击要添加 Azure AD B2C 标识提供者的用户流。
  3. 社交标识提供者下,选择 Fabrikam
  4. 选择“保存”
  5. 若要测试策略,请选择“运行用户流”。
  6. 对于“应用程序”,请选择前面已注册的名为“testapp1”的 Web 应用程序。 “回复 URL”应显示为
  7. 选择“运行用户流”按钮。
  8. 在注册或登录页中,选择 Fabrikam 以与其他 Azure AD B2C 租户登录。

如果登录过程成功,浏览器将重定向到 https://jwt.ms,后者显示 Azure AD B2C 返回的令牌内容。

创建策略密钥

需要存储之前在 Azure AD B2C 租户中创建的应用程序密钥。

  1. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
  2. 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
  3. 在“策略”下,选择“Identity Experience Framework”
  4. 选择“策略密钥”,然后选择“添加”。
  5. 对于“选项”,选择 Manual
  6. 输入策略密钥的名称。 例如,FabrikamAppSecret。 创建密钥时,前缀 B2C_1A_ 会自动添加到密钥名称中,因此在接下来的部分中,XML 中对密钥的引用为 B2C_1A_FabrikamAppSecret
  7. 在“机密”中,输入你之前记录的客户端密码。
  8. 在“密钥用法”处选择
  9. 选择 创建

将 Azure AD B2C 配置为标识提供者

若要允许用户使用另一个 Azure AD B2C 租户 (Fabrikam) 中的帐户进行登录,则需将其他 Azure AD B2C 定义为 Azure AD B2C 可通过终结点与其进行通信的声明提供程序。 该终结点将提供一组声明,Azure AD B2C 使用这些声明来验证特定的用户是否已完成身份验证。

可以通过将 Azure AD B2C 添加到策略扩展文件中 的 ClaimsProvider 元素,将 Azure AD B2C 定义为声明提供程序。

  1. 打开 TrustFrameworkExtensions.xml 文件。

  2. 找到 ClaimsProviders 元素。 如果该元素不存在,请在根元素下添加它。

  3. 添加一个新的 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.cn/{tenant}.partner.onmschina.cn/{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>
    
  4. 使用以下 XML 元素更新相关值:

    XML 元素 价值
    声明提供者\Domain 用于 直接登录的域名。 输入要在直接登录中使用的域名。 例如, fabrikam.com
    技术配置文件\显示名称 此值将显示在登录屏幕上的登录按钮上。 例如 ,Fabrikam
    Metadata\client_id 身份验证提供者的应用程序标识符。 使用之前在其他 Azure AD B2C 租户中创建的应用程序 ID 更新客户端 ID。
    Metadata\METADATA 指向 OpenID Connect 标识提供者配置文档的 URL,也称为 OpenID 众所周知的配置终结点。 输入以下 URL,用其他 Azure AD B2C 租户的域名(例如 Fabrikam)替换{tenant}。 将 {tenant} 替换为另一租户中配置的策略名称,而 {policy] 替换为策略名称:https://{tenant}.b2clogin.cn/{tenant}.partner.onmschina.cn/{policy}/v2.0/.well-known/openid-configuration。 例如,https://fabrikam.b2clogin.cn/fabrikam.partner.onmschina.cn/B2C_1_susi/v2.0/.well-known/openid-configuration
    CryptographicKeys StorageReferenceId 的值更新为之前创建的策略密钥的名称。 例如,B2C_1A_FabrikamAppSecret

添加用户旅程

此时,标识提供者已设置,但还不能在任何登录页中使用。 如果你没有自己的自定义用户旅程,请创建现有模板用户旅程的副本,否则,请继续执行下一步。

  1. 打开初学者包中的 TrustFrameworkBase.xml 文件。
  2. 找到并复制包含 Id="SignUpOrSignIn" 元素的完整内容。
  3. 打开 TrustFrameworkExtensions.xml 并找到 UserJourneys 元素。 如果该元素不存在,请添加一个。
  4. 将您复制的 UserJourney 元素的完整内容粘贴到 UserJourneys 元素下作为其子项。
  5. 对用户旅程的 ID 进行重命名。 例如,Id="CustomSignUpSignIn"

将标识提供者添加到用户旅程

现在你已拥有用户旅程,请将新的身份提供者添加到用户旅程中。 首先添加一个“登录”按钮,然后将该按钮链接到某个操作。 该操作是前面创建的技术配置文件。

  1. 在用户旅程中,查找包含 Type="CombinedSignInAndSignUp"Type="ClaimsProviderSelection" 的业务流程步骤元素。 通常这是第一个编排步骤。 ClaimsProviderSelections 元素包含用户可以用来登录的标识提供者列表。 元素的顺序将决定向用户显示的登录按钮的顺序。 添加ClaimsProviderSelection XML 元素。 将 TargetClaimsExchangeId 的值设置为易记名称。

  2. 在下一个编排步骤中,添加 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>

上传自定义策略

  1. 登录到 Azure 门户
  2. 在门户工具栏中选择“目录 + 订阅”图标,然后选择包含 Azure AD B2C 租户的目录。
  3. 在 Azure 门户中,搜索并选择 Azure AD B2C
  4. 在“策略”下,选择“Identity Experience Framework”
  5. 选择“上传自定义策略”,然后上传已更改的两个策略文件,其顺序为:先上传扩展策略(例如 ),然后上传信赖方策略(例如 TrustFrameworkExtensions.xml)。

测试自定义策略

  1. 选择依赖方策略,例如 B2C_1A_signup_signin
  2. 对于应用程序,请选择您前面注册的 Web 应用程序。 “回复 URL”应显示为
  3. 选择“立即运行”按钮。
  4. 在注册或登录页中,选择 Fabrikam 以与其他 Azure AD B2C 租户登录。

如果登录过程成功,浏览器将重定向到 https://jwt.ms,后者显示 Azure AD B2C 返回的令牌内容。

后续步骤

了解如何 将其他 Azure AD B2C 令牌传递给应用程序