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

基于Azure AD的服务器发起式MFA:如何主动触发MFA验证提示?

如何在Web服务中主动触发Azure AD/ADFS用户的MFA提示?

这个场景我之前在做企业级Web应用的时候实打实碰到过,踩过几个坑,总结了几个可行的方案,咱们唠清楚:

核心思路:绕开SSO限制,精准触发MFA

传统的登录重定向方案在SSO场景下经常失效,因为用户已经有有效会话了。所以得用Azure AD/ADFS提供的强制认证触发机制,而不是重新走一遍完整登录流程。

方案1:增量授权(自定义Web应用首选)

如果你是自己开发的Web应用,已经通过OAuth2/OIDC完成了初始登录,那可以在用户执行高风险操作前,向Azure AD发送一个带强制MFA要求的授权请求,用增量授权的方式触发验证:

具体操作步骤:

  1. 当用户点击高风险操作(比如转账、修改权限)时,你的后端生成一个授权请求URL,关键参数如下:
    GET https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize
    ?client_id={你的应用ID}
    &response_type=code
    &redirect_uri={你的回调地址}
    &scope=openid offline_access {你的API权限范围}
    &prompt=none  # 静默请求,若用户需要MFA会自动弹出验证页;如果想强制让用户确认身份,也可以用prompt=select_account
    &claims={"id_token": {"acr": {"values": ["urn:oasis:names:tc:SAML:2.0:ac:classes:TimeSyncToken"]}}}
    
    这里的acr参数指定了必须使用MFA(TimeSyncToken对应MFA认证类型),prompt=none能避免让用户重复输入密码,直接触发MFA提示。
  2. 用户完成MFA验证后,Azure AD会返回新的授权码,你的应用用这个码换取新的ID Token和Access Token。
  3. 验证新Token中的amr声明(应该包含mfa值),确认用户完成MFA后,再允许执行高风险操作。

方案2:Azure AD条件访问策略(企业全局管控)

如果你的组织用Azure AD条件访问,完全可以不用改代码,靠控制台配置实现:

  • 新建一个条件访问策略,目标选择你的Web应用。
  • 在「授予」环节设置「需要多因素认证」,还可以结合会话控制,比如设置「应用强制重新验证」的时间间隔,或者关联Azure AD Identity Protection的风险检测——当用户执行高风险操作(或会话出现风险)时,自动触发MFA。
  • 缺点是粒度相对粗,没法针对单个操作触发,只能针对整个应用或会话维度。

方案3:ADFS环境下的配置

如果是用ADFS作为身份提供者,那可以通过附加认证规则来触发:

  • 在ADFS中给你的Web应用配置依赖方信任,添加一个规则:当应用发送特定的资源参数(比如resource=https://your-app.com/high-risk)时,强制要求用户完成MFA。
  • 或者在ADFS的Claims Provider Trust中设置认证策略,指定访问特定资源时必须执行MFA验证。

避坑小贴士

  • 别把prompt=login当常规方案用!SSO场景下用户已经登录,这个参数会让用户重新输入密码,体验很差,而且Microsoft账户的电话登录方式可能会跳过密码直接到MFA,但不是所有场景都稳定。
  • 一定要验证Token里的amr声明!只有当这个声明包含mfa时,才能确认用户真的完成了MFA,别只靠重定向后的状态判断。
  • 要是你做的是SPA应用,记得用PKCE流程,避免授权码被劫持的安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:54:36