发送对用户隐藏的 Azure AD B2C 声明
Send Azure AD B2C Claims That Are Hidden from the User
我 sending claims to B2C via a JWT following the WingTig Games demo code。如何向用户(如下所示的 LocalAccountSignUpWithLogonNameWithIDs)隐藏我自行声明的注册 TechnicalProfile
的声明?
我已尝试从我的 ClaimType
定义中删除 UserInputType
节点,但随后我在 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.
然后我从那个 TechnicalProfile
的 InputClaims
和 OutputClaims
中删除了我的声明,并删除了错误,但当时的值没有保留。
<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>
如果您想保留目录中的声明而不向用户显示,最好的选择是:
- 将其作为
InputClaim
添加到 LocalAccountSignUpWithLogonNameWithIDs
技术资料
- 将其作为
PersistedClaim
添加到 AAD-UserWriteUsingLogonName
技术配置文件中,这会将其写入目录
您所做的只是为了持久性而一直发送声明,但声明您不想要来自 SelfAssertedAttributeProvider
的 OutputClaim
。
当您将声明添加为 OutputClaim
时,您就是在声明 SelfAssertedAttributeProvider
需要有一种方法来获取该值。从今天开始,它可以从三种可能的方式中的任何一种获得:
- 用户提供(需要
ClaimType
定义中的UserInputType
)
- 检索自
ValidationTechnicalProfile
- 作为政策中
OutputClaim
的 DefaultValue
提供
您遇到的错误很可能是因为 SelfAssertedAttributeProvider
技术资料无法获得该声明的价值。
正如上面的回答所述
在自我声明的技术配置文件中,输出声明将其呈现给用户
如果声明已在之前的步骤中填充,则您无需逐步传递声明,它们将保留在声明包中,直到旅程结束或直到您使用转换将其删除。
我 sending claims to B2C via a JWT following the WingTig Games demo code。如何向用户(如下所示的 LocalAccountSignUpWithLogonNameWithIDs)隐藏我自行声明的注册 TechnicalProfile
的声明?
我已尝试从我的 ClaimType
定义中删除 UserInputType
节点,但随后我在 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.
然后我从那个 TechnicalProfile
的 InputClaims
和 OutputClaims
中删除了我的声明,并删除了错误,但当时的值没有保留。
<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>
如果您想保留目录中的声明而不向用户显示,最好的选择是:
- 将其作为
InputClaim
添加到LocalAccountSignUpWithLogonNameWithIDs
技术资料 - 将其作为
PersistedClaim
添加到AAD-UserWriteUsingLogonName
技术配置文件中,这会将其写入目录
您所做的只是为了持久性而一直发送声明,但声明您不想要来自 SelfAssertedAttributeProvider
的 OutputClaim
。
当您将声明添加为 OutputClaim
时,您就是在声明 SelfAssertedAttributeProvider
需要有一种方法来获取该值。从今天开始,它可以从三种可能的方式中的任何一种获得:
- 用户提供(需要
ClaimType
定义中的UserInputType
) - 检索自
ValidationTechnicalProfile
- 作为政策中
OutputClaim
的DefaultValue
提供
您遇到的错误很可能是因为 SelfAssertedAttributeProvider
技术资料无法获得该声明的价值。
正如上面的回答所述
在自我声明的技术配置文件中,输出声明将其呈现给用户
如果声明已在之前的步骤中填充,则您无需逐步传递声明,它们将保留在声明包中,直到旅程结束或直到您使用转换将其删除。