发送Azure AD B2C用户隐藏的声明

4

我正在使用JWT向B2C发送声明,按照WingTig Games演示代码。 我该如何在自我声明的注册TechnicalProfile中隐藏用户不需要的声明 (下面是LocalAccountSignUpWithLogonNameWithIDs的示例)?


我尝试从ClaimType定义中删除UserInputType节点,但随后我在用户旅程播放器中获得以下错误:

策略“B2C_1A_signup_signin_extensions”中的技术配置文件“LocalAccountSignUpWithLogonNameWithIDs”中指定的输出声明类型“extension_my_claim”未指定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>

你能否更新问题,解释一下你所指的技术配置文件,并且当你说“如何隐藏声明”时,是指你不想在自我声明的配置文件上显示它们吗? - Omer Iqbal
嘿@OmerIqbal,这是正确的,我的自我断言的个人资料。我已经更新了问题,谢谢! - spottedmahn
2个回答

5
如果要在不向用户显示的情况下将声明保留在目录中,最好的选择是:
1. 将其添加为 LocalAccountSignUpWithLogonNameWithIDs 技术配置文件中的 InputClaim 2. 将其添加为 AAD-UserWriteUsingLogonName 技术配置文件中的 PersistedClaim,这将把它写入目录
你所做的就是将声明发送到持久性,并声明你不需要从 SelfAssertedAttributeProvider 获取 OutputClaim
如果将声明添加为 OutputClaim,则表示 SelfAssertedAttributeProvider 需要有一种获取该值的方法。截至今天,它可以从以下三种方式之一获取:
1. 用户提供(需要在 ClaimType 定义中使用 UserInputType) 2. 从验证技术配置文件检索 3. 在策略中作为 OutputClaimDefaultValue 提供
你收到错误的原因可能是 SelfAssertedAttributeProvider 技术配置文件无法为此声明获取值。

1
如上面的答案所述,在自我声明的技术配置文件中,输出声明将其呈现给用户。
如果该声明已在先前的步骤中填充,则无需在步骤之间传递声明,它们会一直保留在声明包中,直到旅程结束或使用转换来删除它们。

我们如何删除声明(claims)?我知道NullClaim,但是对于日期和布尔类型的声明呢? - Muhammad Mamoor Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接