限制 Azure AD B2C 中应用的声明

Jay*_*ddy 5 azure-ad-b2c

我们有 3 个不同的应用程序需要不同的扩展声明集。申请 A - 权利要求 A1、权利要求 A2、权利要求 A3 申请 B - 权利要求 B1、权利要求 B2、权利要求 B3

我们在 TrustFrameworkExtensions 中定义了六个声明,更新了各种 TechnicalProfiles 以获取用户的输入并将其写入目录。

为了支持各个应用程序的需求,我们创建了 2 个 RP 文件,每个应用程序一个,并定义了特定于应用程序的用户旅程。

6 个声明同时出现在两个应用程序中,我们希望通过应用程序限制声明。

尝试将 TrustFrameworkExtensions 中的所有内容复制到 RP 文件中,RP 无法加载并引发如下错误

无法上传策略。原因:验证失败:在租户“XXXXXXXXX.onmicrosoft.com”的策略“B2C_1A_1182017SIGNUP_SIGNIN”中发现 3 个验证错误。

在租户“XXXXXXXXX.onmicrosoft.com”的策略“B2C_1A_1182017signup_signin”中 ID 为“AAD-UserWriteUsingAlternativeSecurityId”的 TechnicalProfile 中找不到键为“ApplicationObjectId”的必需元数据项。

在租户“XXXXXXXXX.onmicrosoft.com”的策略“B2C_1A_1182017signup_signin”中 ID 为“AAD-UserWriteUsingLogonEmail”的 TechnicalProfile 中找不到键为“ApplicationObjectId”的必需元数据项。

在租户“XXXXXXXXX.onmicrosoft.com”的策略“B2C_1A_1182017signup_signin”中 ID 为“AAD-UserWriteProfileUsingObjectId”的 TechnicalProfile 中找不到键为“ApplicationObjectId”的必需元数据项。

感谢支持具有不同声明的多个应用程序的建议和指导。

nyo*_*ung 7

要在自定义策略中使用扩展属性,您需要将一些配置添加到涉及 b2c-extensions-app 的文件中,该应用在门户中为每个 B2C 租户自动创建和注册。

在您的情况下,您似乎在技术简介的关键部分缺少b2c-extensions-app 的内容,ApplicationObjectID并且可能缺少该内容。ClientIdMetadataAAD-Common

创建自定义属性文档的后续步骤部分描述了如何执行此配置。

https://docs.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-custom-attributes#modify-your-custom-policy

  1. 打开您的策略的扩展文件。例如,SocialAndLocalAccounts/TrustFrameworkExtensions.xml。

  2. 找到 ClaimsProviders 元素。向 ClaimsProviders 元素添加一个新的 ClaimsProvider。

  3. 将 ApplicationObjectId 替换为您之前记录的对象 ID。然后将 ClientId 替换为您之前在以下代码段中记录的应用程序 ID。

    <ClaimsProvider>
      <DisplayName>Azure Active Directory</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="AAD-Common">
          <Metadata>
            <!--Insert b2c-extensions-app application ID here, for example: 11111111-1111-1111-1111-111111111111-->  
            <Item Key="ClientId"></Item>
            <!--Insert b2c-extensions-app application ObjectId here, for example: 22222222-2222-2222-2222-222222222222-->
            <Item Key="ApplicationObjectId"></Item>
          </Metadata>
        </TechnicalProfile>
      </TechnicalProfiles> 
    </ClaimsProvider>
Run Code Online (Sandbox Code Playgroud)


spo*_*ahn 1

用于<RelyingParty><TechnicalProfile><OutputClaims>控制返回的索赔。

<RelyingParty>
    <DefaultUserJourney ReferenceId="SignInAppA" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="OpenIdConnect" />
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="ClaimA1" />
      </OutputClaims>
      <SubjectNamingInfo ClaimType="sub" />
    </TechnicalProfile>
</RelyingParty>
Run Code Online (Sandbox Code Playgroud)

<RelyingParty>
    <DefaultUserJourney ReferenceId="SignInAppB" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="OpenIdConnect" />
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="ClaimB1" />
      </OutputClaims>
      <SubjectNamingInfo ClaimType="sub" />
    </TechnicalProfile>
</RelyingParty>
Run Code Online (Sandbox Code Playgroud)