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

配置IIS反向代理并转发Windows认证用户名的方法咨询

解决IIS反向代理转发Windows认证用户名的问题

核心问题原因

你遇到的LOGON_USER/AUTH_USER为空的情况,大概率是因为代理站点没强制触发Windows认证,或者这些服务器变量默认不允许在URL Rewrite中被引用,再加上ARR代理场景下,REMOTE_USER才是更可靠的认证用户变量。

具体解决步骤

  • 强制代理站点的Windows认证

    1. 打开IIS管理器,找到你的代理站点,进入「身份验证」模块
    2. 禁用「匿名身份验证」,只启用「Windows身份验证」
    3. 确认站点应用程序池的身份(比如Network Service)拥有域内认证权限,避免认证失败导致变量为空
  • 配置URL Rewrite规则时使用正确变量
    不要用LOGON_USER,优先用{REMOTE_USER}变量,它在Windows认证通过后会自动填充用户的完整身份(格式通常是域\用户名):

    1. 进入代理站点的「URL Rewrite」模块,编辑现有的代理规则
    2. 在规则的「服务器变量」选项卡,添加HTTP_X_LOGON_USER(注意请求头要加HTTP_前缀,IIS会自动转换为X-LOGON-USER),值设为{REMOTE_USER}
    3. 如果需要只传递用户名(去掉域名前缀),可以用正则捕获处理,比如先在规则的「条件」中添加:
      <add input="{REMOTE_USER}" pattern="^[^\\]+\\(.+)$" />
      
      再把变量值设为{C:1}即可提取用户名部分
  • 允许服务器变量的引用权限(可选)
    如果一定要用LOGON_USER或AUTH_USER:

    1. 在「URL Rewrite」模块的右侧菜单点击「查看服务器变量」
    2. 添加LOGON_USER和AUTH_USER到允许列表,之后就能在规则中引用这些变量了
  • 验证规则配置示例
    最终的入站代理规则XML大概是这样:

    <rule name="Forward to Backend" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
        <add input="{REMOTE_USER}" pattern="^.+$" />
      </conditions>
      <action type="Rewrite" url="http://your-new-backend/{R:1}" />
      <serverVariables>
        <set name="HTTP_X_LOGON_USER" value="{REMOTE_USER}" />
      </serverVariables>
    </rule>
    

验证方法

  • 用旧客户端发起请求,通过Fiddler等工具抓包,检查转发到后端的请求中是否存在X-LOGON-USER头,且值为正确的用户名
  • 查看IIS日志的cs-username字段,确认该字段有值(说明Windows认证已成功完成)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:27:21