【问题标题】:Send Azure AD B2C Claims That Are Hidden from the User发送对用户隐藏的 Azure AD B2C 声明
【发布时间】:2025-12-03 21:05:01
【问题描述】:

我是sending claims to B2C via a JWT,关注WingTig Games demo code。如何向用户隐藏我的自我声明注册 TechnicalProfile 的声明(LocalAccountSignUpWithLogonNameWithIDs 如下所示)?


我尝试从 ClaimType 定义中删除 UserInputType 节点,但随后在 User Journey Player 中出现以下错误:

在租户“mytenant.onmicrosoft.com”的策略“B2C_1A_signup_signin_extensions”中指定的技术配置文件中指定的输出声明类型“extension_my_claim”,ID 为“LocalAccountSignUpWithLogonNameWithIDs”,未指定 UserInputType 或 DefaultValue,也未从 ValidationTechnicalProfile 中检索.

然后,我从 TechnicalProfileInputClaimsOutputClaims 中删除了我的声明,并删除了错误,但当时的值没有保留。


<TechnicalProfile Id="LocalAccountSignUpWithLogonNameWithIDs">
    <DisplayName>User ID signup with associate and org id</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <Metadata>
        <Item Key="IpAddressClaimReferenceId">IpAddress</Item>
        <Item Key="ContentDefinitionReferenceId">api.localaccountsignup</Item>
        <Item Key="LocalAccountType">Username</Item>
        <Item Key="LocalAccountProfile">true</Item>
        <Item Key="language.button_continue">Create</Item>
    </Metadata>
    <CryptographicKeys>
        <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
    </CryptographicKeys>
    <InputClaims>
        <InputClaim ClaimTypeReferenceId="signInName" />
        <InputClaim ClaimTypeReferenceId="extension_my_claim" /> 
    </InputClaims>
    <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId" Required="true" />
        <OutputClaim ClaimTypeReferenceId="signInName" Required="true" />
        <OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
        <OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
        <OutputClaim ClaimTypeReferenceId="email" Required="true" />
        <OutputClaim ClaimTypeReferenceId="extension_my_claim" Required="true"/>
        <OutputClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" DefaultValue="true" />
        <OutputClaim ClaimTypeReferenceId="newUser" />
        <OutputClaim ClaimTypeReferenceId="authenticationSource" />
        <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
    </OutputClaims>
    <ValidationTechnicalProfiles>
        <ValidationTechnicalProfile ReferenceId="AAD-UserWriteUsingLogonName" />
    </ValidationTechnicalProfiles>
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>

【问题讨论】:

  • 您能否更新问题以解释您指的是哪个技术配置文件,以及“我如何隐藏声明”,您的意思是您不想在自我断言的配置文件中显示它们?
  • 嘿@OmerIqbal,这是正确的,我自称的个人资料。我已经更新了问题,谢谢!

标签: azure-ad-b2c


【解决方案1】:

正如上面的回答所说

在自我断言的技术配置文件中,输出声明将其呈现给用户

如果之前已在上一步中填充了声明,则您无需逐步传递声明,它们会一直保留在声明包中,直到旅程结束或您使用转换将其删除。

【讨论】:

  • 我们如何删除声明?我知道 NullClaim,但是 Date 和 Boolean 类型的声明呢?
【解决方案2】:

如果您想将声明保留在目录中而不向用户显示,最好的选择是:

  1. 将其作为InputClaim 添加到LocalAccountSignUpWithLogonNameWithIDs 技术资料
  2. 将其作为PersistedClaim 添加到AAD-UserWriteUsingLogonName 技术配置文件中,这会将其写入目录

您所做的只是为了持久性而一直发送声明,但声明您不想要来自SelfAssertedAttributeProviderOutputClaim

当您将声明添加为OutputClaim 时,您就是在声明SelfAssertedAttributeProvider 需要有一种方法来获取该值。到今天为止,它可以通过以下三种可能的方式中的任何一种来获取:

  1. 由用户提供(在ClaimType 定义中需要UserInputType
  2. 取自ValidationTechnicalProfile
  3. 作为政策中OutputClaimDefaultValue 提供

您遇到的错误很可能是因为 SelfAssertedAttributeProvider 技术配置文件无法获得此声明的价值。

【讨论】: