You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure AD B2C自定义策略获取强认证设备报Bad request错误

问题描述

搭建支持TOTP的Azure AD B2C自定义策略登录流程时,参考官方MFA自定义策略文档完成TRUSTFRAMEWORKEXTENSIONS文件修改后,测试流程中提交邮箱、密码后页面直接跳转回业务站点。查看审计日志发现活动类型为*"Get available strong authentication devices"的ClientError,错误原因为"The service received a bad request"*。

涉及的技术配置文件(Technical Profile)如下:

<TechnicalProfile Id="AzureMfa-GetAvailableDevices">
   <DisplayName>Get Available Devices</DisplayName>
   <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureMfaProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
   <Metadata>
      <Item Key="Operation">GetAvailableDevices</Item>
   </Metadata>
   <InputClaims>
      <InputClaim ClaimTypeReferenceId="userPrincipalName" />
   </InputClaims>
   <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="numberOfAvailableDevices" />
   </OutputClaims>
</TechnicalProfile>

对应的编排步骤(Orchestration Step)配置如下:

<OrchestrationStep Order="2" Type="ClaimsExchange">
   <Preconditions>
      <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
         <Value>newUser</Value>
         <Value>True</Value>
         <Action>SkipThisOrchestrationStep</Action>
      </Precondition>
   </Preconditions>
   <ClaimsExchanges>
      <ClaimsExchange Id="CheckAvailableDevices" TechnicalProfileReferenceId="AzureMfa-GetAvailableDevices" />
   </ClaimsExchanges>
</OrchestrationStep>

现有配置的明显问题
  • 输入声明缺失必填字段:AzureMfa-GetAvailableDevices调用MFA服务接口时,除userPrincipalName外强制要求传入tenantId作为入参,当前InputClaims节点仅配置了UPN,请求缺少租户上下文会直接被服务端判定为坏请求。
  • TOTP场景元数据缺失:默认的GetAvailableDevices操作仅查询短信、语音类MFA设备,要支持TOTP认证方式必须在Metadata节点添加<Item Key="IncludeTOTPDevices">True</Item>配置,未添加时请求参数和服务端TOTP接口的校验规则不匹配。
  • 前置校验逻辑不完善:当前编排步骤仅配置了新用户跳过规则,没有校验前序密码校验步骤是否成功执行、userPrincipalName是否已被正确写入声明包,若前序步骤异常导致UPN值为空,调用MFA接口时必然触发坏请求错误。

后续排查方向
  • 开启Application Insights日志追踪,抓取AzureMfa-GetAvailableDevices执行时的完整声明包,确认调用发生时userPrincipalName是否存在有效值、tenantId/objectId等必填字段是否缺失。
  • 核对前序本地账号登录的技术配置,确认密码校验通过后是否正确输出userPrincipalName声明,排查是否存在声明映射错误、声明名称不匹配导致的UPN传值失败问题。
  • 核对基础策略文件中的ClaimType定义,确认用到的userPrincipalName、numberOfAvailableDevices等声明在基础层和扩展层的定义一致,避免声明序列化异常导致的请求参数格式错误。
  • 临时移除编排步骤的前置条件,使用已预先配置好TOTP认证方式的测试用户走流程,排除newUser标记判断逻辑异常导致的流程分支错误。

内容的提问来源于stack exchange,提问作者Nait

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:15:37