Azure AD B2C SignUpOrSignIn流程重复要求输入MFA手机号求助
一、检查并配置IEF应用权限
Azure AD B2C的Identity Experience Framework(IEF)应用需要具备读取用户身份验证方法的权限,才能获取存储的strongAuthenticationPhoneNumber:
- 登录Azure AD B2C门户,进入应用注册,找到你的IEF应用(通常命名包含
b2cief)。 - 切换到API权限页面,点击添加权限 → 选择Microsoft Graph → 选择应用权限。
- 搜索并添加
UserAuthenticationMethod.Read权限,点击添加权限。 - 点击为[你的租户名]授予管理员同意,完成权限配置。
二、修改策略配置,确保读取并复用已存储的手机号
需要在策略中添加读取用户手机号的步骤,并将其传递给PhoneFactor-InputOrVerify技术配置文件:
1. 更新用户数据读取技术配置文件
在TrustFrameworkExtensions.xml中,找到AAD-UserReadUsingObjectId技术配置文件,在<OutputClaims>节点下添加读取手机号的声明:
<TechnicalProfile Id="AAD-UserReadUsingObjectId"> <OutputClaims> <!-- 保留原有输出声明 --> <OutputClaim ClaimTypeReferenceId="strongAuthenticationPhoneNumber" /> </OutputClaims> </TechnicalProfile>
2. 在用户旅程中添加读取手机号的步骤
在SignUpOrSignIn用户旅程的编排步骤中,在调用PhoneFactor-InputOrVerify之前,插入读取用户数据的步骤(调整Order值确保顺序正确,比如在登录验证后的步骤之后):
<OrchestrationStep Order="3" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="ReadUserPhoneNumber" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" /> </ClaimsExchanges> </OrchestrationStep>
3. 配置PhoneFactor技术配置文件复用手机号
修改PhoneFactor-InputOrVerify技术配置文件,将已读取的strongAuthenticationPhoneNumber作为手机号的默认值,并禁止用户修改(可选):
<TechnicalProfile Id="PhoneFactor-InputOrVerify"> <InputClaims> <InputClaim ClaimTypeReferenceId="phoneNumber" DefaultValue="{Claim:strongAuthenticationPhoneNumber}" /> </InputClaims> <!-- 若要禁止用户修改手机号,可调整对应的ClaimType定义 --> </TechnicalProfile>
如果需要完全禁止用户修改手机号,在TrustFrameworkBase.xml或TrustFrameworkExtensions.xml中找到phoneNumber的ClaimType定义,设置UserInputType为Hidden或ReadOnly:
<ClaimType Id="phoneNumber"> <DisplayName>Phone Number</DisplayName> <DataType>string</DataType> <UserInputType>Hidden</UserInputType> </ClaimType>
验证效果
完成上述配置后,用户首次登录验证手机号后,后续注销再登录时,策略会自动读取已存储的strongAuthenticationPhoneNumber,直接触发2FA验证,无需重复输入或修改手机号。
内容的提问来源于stack exchange,提问作者mike3623033

