为什么电子邮件声明需要在我的TechnicalProfile中作为输入声明

时间:2018-03-29 21:16:55

标签: azure-ad-b2c identity-experience-framework

我尝试传递email声明,就像我已将其他声明传递给注册政策,但它没有成功。我不得不将其添加为我的技术资料的<InputClaim>,但我不明白为什么

在下面的示例中,我传递了emailextension_MyCustomClaim。我没有显示extension_MyCustomClaim,但值仍然存在。

我的叶子政策

<TrustFrameworkPolicy ...>
    ...
    <RelyingParty>
        <DefaultUserJourney ReferenceId="MyUserJourney" />
        <TechnicalProfile Id="PolicyProfile">
            <DisplayName>PolicyProfile</DisplayName>
            <Protocol Name="OpenIdConnect" />
            <InputTokenFormat>JWT</InputTokenFormat>
            <CryptographicKeys>
                <Key Id="client_secret" StorageReferenceId="B2C_1A_MyClientSecret" />
            </CryptographicKeys>
            <InputClaims>
                <InputClaim ClaimTypeReferenceId="extension_MyCustomClaim" />
                <InputClaim ClaimTypeReferenceId="email" />
            </InputClaims>
            ...
        </TechnicalProfile>
    </RelyingParty> 
</TrustFrameworkPolicy>

我的用户旅程

<UserJourney Id="MyUserJourney">
    <OrchestrationSteps>
        <OrchestrationStep Order="1" Type="ClaimsExchange" ContentDefinitionReferenceId="api.signup-ext">
            <ClaimsExchanges>
                <ClaimsExchange Id="LocalAccountSignUp" TechnicalProfileReferenceId="LocalAccountSignUp" />
            </ClaimsExchanges>
        </OrchestrationStep>
        ...
    </OrchestrationSteps>
</UserJourney>

我的技术资料

<TechnicalProfile Id="LocalAccountSignUp">
    <DisplayName>User ID signup with input claims</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <Metadata>
        ...
    </Metadata>
    <CryptographicKeys>
        ...
    </CryptographicKeys>
    <InputClaims>
        <!-- why do I have to specify this here? -->
        <!-- The other claim like extension_MyCustomClaim are -->
        <!-- not specified here but are being persisted -->
        <InputClaim ClaimTypeReferenceId="email" />
    </InputClaims>
    <OutputClaims>
        <!-- uncommenting this claim will put it on the screen.  used for debugging -->
        <!-- <OutputClaim ClaimTypeReferenceId="extension_MyCustomClaim" /> -->
    </OutputClaims>
    ...
</TechnicalProfile>

如果我将extension_MyCustomClaim添加为<OutputClaim>,则会在屏幕上显示已填充的值。我不必将其添加为<InputClaim>

我不理解这里的不一致。

更新

我错了......

  

如果我将extension_MyCustomClaim添加为<OutputClaim>,则会在屏幕上显示已填充的值。我不必将其添加为<InputClaim>

不是真的。索赔将显示在屏幕上,但值 已填充

1 个答案:

答案 0 :(得分:1)

对于“自我声明”的技术配置文件,声明<InputClaims />可以将值传递到UI表单。

例如:

<InputClaims>
    <InputClaim ClaimTypeReferenceId="email" />
</InputClaims>
<OutputClaims>
    <OutputClaim ClaimTypeReferenceId="email" Required="true" />
</OutputClaims>

这声明了一个绑定到email声明的表单字段。传入默认值或原始值(由<InputClaim />定义),并传递修改或提交的值(由<OutputClaim />定义)。