我需要能够使用电子邮件和电话号码以及常规密码(不是 OTP)登录 azure B2C。我不想使用 OTP 短信,因为我需要双因素登录,而 OTP 是第二个因素。
我认为我能够根据用户名或电子邮件示例来实现这一目标。我想要一个电话号码作为用户名。我已经解决了一个注册案例,但我专注于登录。在收集 singInName 之后和发送验证之前,是否有任何选项可以使用 StringReplace 转换signInName?
我尝试建立一个技术配置文件,将用户名从以下位置转换: 7900 654321 至 7900654321(用空字符串替换空格)。我尝试通过以下政策来实现这一目标:
<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
<Metadata>
<Item Key="setting.forgotPasswordLinkOverride">ForgotPasswordExchange</Item>
</Metadata>
<ValidationTechnicalProfiles>
<ValidationTechnicalProfile ReferenceId="regexAnalysisUsername" />
<ValidationTechnicalProfile ReferenceId="NormalizePhoneNumberProfile"
ContinueOnError="false">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="true">
<Value>isEmailBoolean</Value>
<Value>True</Value>
<Action>SkipThisValidationTechnicalProfile</Action>
</Precondition>
</Preconditions>
</ValidationTechnicalProfile>
<!-- Initiate a normal logon against Azure AD B2C -->
<ValidationTechnicalProfile ReferenceId="login-NonInteractive" />
</ValidationTechnicalProfiles>
</TechnicalProfile>
<TechnicalProfile Id="NormalizePhoneNumberProfile">
<DisplayName>extract username</DisplayName>
<Protocol Name="Proprietary"
Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<InputClaims>
<InputClaim ClaimTypeReferenceId="signInName" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="signInName" />
</OutputClaims>
<OutputClaimsTransformations>
<OutputClaimsTransformation ReferenceId="NormalizePhoneNumber" />
</OutputClaimsTransformations>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>
变换如下:
<ClaimsTransformation Id="NormalizePhoneNumber" TransformationMethod="StringReplace">
<InputClaims>
<InputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="inputClaim" />
</InputClaims>
<InputParameters>
<InputParameter Id="oldValue" DataType="string" Value=" " />
<InputParameter Id="newValue" DataType="string" Value="" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="outputClaim" />
</OutputClaims>
</ClaimsTransformation>
是否可以通过自定义策略来实现这一目标?
实现您的要求/转换的最简单方法是通过对声明使用正则表达式限制来防止用户在
signInName
字段中输入任何空格字符:
<ClaimType Id="signInName">
<DisplayName>Sign in name</DisplayName>
<DataType>string</DataType>
<UserHelpText/>
<UserInputType>TextBox</UserInputType>
<Restriction>
<Pattern RegularExpression="^\S+$" HelpText="Enter your email or phone number without spaces." />
</Restriction>
</ClaimType>