Azure B2C 自定义策略 - 有没有办法在 ClaimsProviderSelection 编排步骤中显示声明
Azure B2C custom policy - Is there a way to display a claim in a ClaimsProviderSelection orchestration step
我目前正在为我的身份验证流程使用 Azure B2C 自定义策略。
我有一个 ClaimsProviderSelection 编排步骤,它向用户显示两个选项:
- 将代码发送到他们在身份验证方法中保存的 MFA 电子邮件
- 丢失电子邮件
我想做的是通过在显示文本或按钮本身(见下文)中使用 ClaimProvider 来显示用户的电子邮件地址
如果这不可能,那么我希望能够在验证控制页面本身上添加一个 'lost email' 按钮 - 就像这样:
不过据我所知,这似乎仅适用于 'ForgotPasswordExchange'(如此处所示:https://docs.microsoft.com/en-us/azure/active-directory-b2c/add-password-reset-policy?pivots=b2c-custom-policy)用于密码而不是身份验证方法。
如果有人在自定义 ClaimsProviderSelection 步骤或在编排步骤上添加自定义链接方面有任何经验,将不胜感激您的帮助!
请参阅下面的代码示例:
编排步骤:
<OrchestrationStep Order="2" Type="ClaimsProviderSelection" ContentDefinitionReferenceId='api.MFAselections' >
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="false">
<Value>strongAuthenticationEmailAddress</Value>
<Value>strongAuthenticationPhoneNumber</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsProviderSelections>
<ClaimsProviderSelection TargetClaimsExchangeId="MFAVerifyEmailAddress" />
<ClaimsProviderSelection TargetClaimsExchangeId="LostEmailExchange" />
</ClaimsProviderSelections>
</OrchestrationStep>
技术简介:
<TechnicalProfile Id="MFA_VerifyEmailAddress">
<DisplayName>SEND TO {Claim:strongAuthenticationEmailAddress}
</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ContentDefinitionReferenceId">MFAVerifyEmail</Item>
<Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
<!-- <Item Key="setting.showContinueButton">false</Item> -->
<Item Key="setting.showCancelButton">false</Item>
<Item Key="UserMessageIfSessionDoesNotExist">You have exceeded the maximum time allowed.</Item>
<Item Key="UserMessageIfMaxRetryAttempted">You have exceeded the number of retries allowed.</Item>
<Item Key="UserMessageIfInvalidCode">You have entered the wrong code.</Item>
<Item Key="UserMessageIfSessionConflict">Cannot verify the code, please try again later.</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="MFAcomplete" DefaultValue="true" AlwaysUseDefaultValue='true'/>
</InputClaims>
<DisplayClaims>
<DisplayClaim DisplayControlReferenceId="emailVerificationControl" />
</DisplayClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="MFAcomplete" DefaultValue="email" AlwaysUseDefaultValue='true' />
<OutputClaim ClaimTypeReferenceId="isLostEmail" DefaultValue="false" AlwaysUseDefaultValue='true' />
</OutputClaims>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>
您是否尝试过在上一步中对电子邮件进行输出声明转换,创建字符串类型的声明,然后将电子邮件附加到它。并将其显示在屏幕上。
对于遇到此问题的任何人 - 这就是我最终所做的:
- 添加 ContentDefinitionParameters 并声明您的 RelyingParty 中的 UserJourneyBehaviors
<ContentDefinitionParameters> <Parameter Name="email">{Claim:maskedEmail}</Parameter> </ContentDefinitionParameters>
- 使用JS从源代码中抓取邮件声明,并插入到HTML
const parser = new URL(SETTINGS.remoteResource); let email = parser.searchParams.get('email');
我目前正在为我的身份验证流程使用 Azure B2C 自定义策略。
我有一个 ClaimsProviderSelection 编排步骤,它向用户显示两个选项:
- 将代码发送到他们在身份验证方法中保存的 MFA 电子邮件
- 丢失电子邮件
我想做的是通过在显示文本或按钮本身(见下文)中使用 ClaimProvider 来显示用户的电子邮件地址
如果这不可能,那么我希望能够在验证控制页面本身上添加一个 'lost email' 按钮 - 就像这样:
不过据我所知,这似乎仅适用于 'ForgotPasswordExchange'(如此处所示:https://docs.microsoft.com/en-us/azure/active-directory-b2c/add-password-reset-policy?pivots=b2c-custom-policy)用于密码而不是身份验证方法。
如果有人在自定义 ClaimsProviderSelection 步骤或在编排步骤上添加自定义链接方面有任何经验,将不胜感激您的帮助!
请参阅下面的代码示例:
编排步骤:
<OrchestrationStep Order="2" Type="ClaimsProviderSelection" ContentDefinitionReferenceId='api.MFAselections' >
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="false">
<Value>strongAuthenticationEmailAddress</Value>
<Value>strongAuthenticationPhoneNumber</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsProviderSelections>
<ClaimsProviderSelection TargetClaimsExchangeId="MFAVerifyEmailAddress" />
<ClaimsProviderSelection TargetClaimsExchangeId="LostEmailExchange" />
</ClaimsProviderSelections>
</OrchestrationStep>
技术简介:
<TechnicalProfile Id="MFA_VerifyEmailAddress">
<DisplayName>SEND TO {Claim:strongAuthenticationEmailAddress}
</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ContentDefinitionReferenceId">MFAVerifyEmail</Item>
<Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
<!-- <Item Key="setting.showContinueButton">false</Item> -->
<Item Key="setting.showCancelButton">false</Item>
<Item Key="UserMessageIfSessionDoesNotExist">You have exceeded the maximum time allowed.</Item>
<Item Key="UserMessageIfMaxRetryAttempted">You have exceeded the number of retries allowed.</Item>
<Item Key="UserMessageIfInvalidCode">You have entered the wrong code.</Item>
<Item Key="UserMessageIfSessionConflict">Cannot verify the code, please try again later.</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="MFAcomplete" DefaultValue="true" AlwaysUseDefaultValue='true'/>
</InputClaims>
<DisplayClaims>
<DisplayClaim DisplayControlReferenceId="emailVerificationControl" />
</DisplayClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="MFAcomplete" DefaultValue="email" AlwaysUseDefaultValue='true' />
<OutputClaim ClaimTypeReferenceId="isLostEmail" DefaultValue="false" AlwaysUseDefaultValue='true' />
</OutputClaims>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>
您是否尝试过在上一步中对电子邮件进行输出声明转换,创建字符串类型的声明,然后将电子邮件附加到它。并将其显示在屏幕上。
对于遇到此问题的任何人 - 这就是我最终所做的:
- 添加 ContentDefinitionParameters 并声明您的 RelyingParty 中的 UserJourneyBehaviors
<ContentDefinitionParameters> <Parameter Name="email">{Claim:maskedEmail}</Parameter> </ContentDefinitionParameters>
- 使用JS从源代码中抓取邮件声明,并插入到HTML
const parser = new URL(SETTINGS.remoteResource); let email = parser.searchParams.get('email');