I'm sending claims to B2C via a JWT following the WingTig Games demo code. How do I hide the claims on my self-asserted signup TechnicalProfile
from the user (LocalAccountSignUpWithLogonNameWithIDs shown below)?
I've tried removing the UserInputType
node from my ClaimType
definition but then I get the following error in the User Journey Player:
Output claim type "extension_my_claim" specified in the technical profile with id "LocalAccountSignUpWithLogonNameWithIDs" in policy "B2C_1A_signup_signin_extensions" of tenant "mytenant.onmicrosoft.com" does not specify a UserInputType or a DefaultValue, and is not retrieved from a ValidationTechnicalProfile either.
So then I removed my claims from the InputClaims
and OutputClaims
of that TechnicalProfile
and that removed the error but the values were not persisted then.
<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>
If you want to persist the claim in the directory without showing it to the user, the best option would be:
InputClaim
to the LocalAccountSignUpWithLogonNameWithIDs
technical profilePersistedClaim
in the AAD-UserWriteUsingLogonName
technical profile, which will write it to the directoryAll you are doing is sending the claim in all the way for persistence, but declaring that you do not want an OutputClaim
from the SelfAssertedAttributeProvider
.
When you add the claim as an OutputClaim
, then you are declaring that SelfAssertedAttributeProvider
needs to have a way to get the value. As of today, it can be sourced from any one of the three possible ways:
UserInputType
in the ClaimType
definition)ValidationTechnicalProfile
DefaultValue
of the OutputClaim
in the policyThe error you were getting was likely because there was no way for the SelfAssertedAttributeProvider
technical profile to get a value for this claim.