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

IIS条件跳过内置Windows身份验证 为TFS旧应用适配2FA相关问题

解决方案

原方案失效原因

IIS原生Windows身份验证模块的执行优先级高于用户自定义的HTTP模块,请求还未进入你编写的自定义模块逻辑,IIS就已经完成401质询返回,因此你的代码没有触发机会。

可行实现方案

方案1:调整模块执行顺序+原有自定义代码

  • 先在IIS代理站点的身份验证配置中,同时启用「匿名身份验证」和「Windows身份验证」,匿名身份验证标识保持默认IUSR即可
  • 进入IIS站点的「模块」功能,找到你开发的自定义HTTP模块,点击「上移」按钮,将其移动到WindowsAuthentication模块之前
  • 保留你现有的SkipAuthorization配置代码,即可在Windows认证触发前完成条件判断,符合要求的请求会直接跳过后续认证流程,以匿名身份透传

方案2:纯配置实现(无需修改代码)

通过IIS的<location>标签+URL Rewrite规则实现条件跳过认证:

步骤1:配置静态路径匿名访问

在站点根目录的web.config中添加如下配置,单独为/_static/*路径开放匿名访问,关闭Windows认证:

<location path="_static">
  <system.web>
    <authorization>
      <allow users="?" />
    </authorization>
  </system.web>
  <system.webServer>
    <security>
      <authentication>
        <windowsAuthentication enabled="false" />
        <anonymousAuthentication enabled="true" />
      </authentication>
    </security>
  </system.webServer>
</location>

步骤2:配置JWT请求跳过认证

  • 先进入IIS站点的URL Rewrite功能,点击「查看服务器变量」,新增允许的变量SKIP_AUTHORIZATION
  • 在web.config的system.webServer节点下添加如下重写规则,匹配携带Bearer头的JWT请求,自动跳过认证:
<rewrite>
  <rules>
    <rule name="Skip Windows Auth for JWT" stopProcessing="false">
      <match url=".*" />
      <conditions>
        <add input="{HTTP_AUTHORIZATION}" pattern="^Bearer .+" />
      </conditions>
      <serverVariables>
        <set name="SKIP_AUTHORIZATION" value="1" />
      </serverVariables>
      <action type="None" />
    </rule>
  </rules>
</rewrite>

注意事项

  • 如果你使用IIS ARR作为反向代理组件,需要在ARR代理设置中开启「保留客户端请求头」,避免JWT的Authorization头被代理丢弃
  • 经典管道模式下,自定义HTTP模块需要同时在system.web/httpModules节点注册,仅在system.webServer/modules注册不会被加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:24:04