如何在Microsoft OAuth2 v2.0授权端点强制启用MFA认证
问题根因
Azure AD OAuth2 v2.0 端点已废弃原v1版本支持的amr_values请求参数,因此传入该参数会直接返回AADSTS901002错误。而你调用合作伙伴中心API返回500错误的原因是,新版合作伙伴中心API仅兼容v2.0端点签发的令牌,v1端点的令牌格式、声明结构不符合接口要求。
解决方案
v2.0端点下强制触发MFA有两种可行方案:
方案1:在授权请求中添加claims参数
该方案是标准OIDC协议实现方式,无需改动Azure后台配置,直接调整授权请求即可:
- 构造要求强制返回MFA声明的JSON结构:
{ "id_token": { "amr": { "essential": true, "values": ["mfa"] } }, "access_token": { "amr": { "essential": true, "values": ["mfa"] } } }
- 将上述JSON做URL编码后,作为
claims参数的值附加到v2.0授权URL末尾即可,示例请求格式如下:https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/authorize?client_id={应用客户端ID}&response_type=code&redirect_uri={你的回调地址}&scope={请求的权限范围}&claims={URL编码后的JSON字符串}
方案2:配置条件访问策略
如果该应用所有用户都需要强制MFA,可以直接在Azure门户配置条件访问策略,不需要修改请求参数:
- 进入对应应用的注册页面,在安全配置中关联强制MFA的条件访问策略,覆盖所有访问该应用的用户,Azure AD会自动在用户登录时触发MFA校验。
注意事项
- 构造
claims参数时必须完成URL编码,否则会出现参数解析错误 - 测试时建议先清空浏览器微软登录会话,避免已有登录状态的MFA缓存影响测试结果
- 如果使用条件访问方案,需要确保对应租户已开启条件访问功能,且目标用户在策略的覆盖范围内
内容的提问来源于stack exchange,提问作者guffi
相关产品推荐
相关产品推荐

