配置IIS反向代理并转发Windows认证用户名的方法咨询
解决IIS反向代理转发Windows认证用户名的问题
核心问题原因
你遇到的LOGON_USER/AUTH_USER为空的情况,大概率是因为代理站点没强制触发Windows认证,或者这些服务器变量默认不允许在URL Rewrite中被引用,再加上ARR代理场景下,REMOTE_USER才是更可靠的认证用户变量。
具体解决步骤
强制代理站点的Windows认证
- 打开IIS管理器,找到你的代理站点,进入「身份验证」模块
- 禁用「匿名身份验证」,只启用「Windows身份验证」
- 确认站点应用程序池的身份(比如Network Service)拥有域内认证权限,避免认证失败导致变量为空
配置URL Rewrite规则时使用正确变量
不要用LOGON_USER,优先用{REMOTE_USER}变量,它在Windows认证通过后会自动填充用户的完整身份(格式通常是域\用户名):- 进入代理站点的「URL Rewrite」模块,编辑现有的代理规则
- 在规则的「服务器变量」选项卡,添加
HTTP_X_LOGON_USER(注意请求头要加HTTP_前缀,IIS会自动转换为X-LOGON-USER),值设为{REMOTE_USER} - 如果需要只传递用户名(去掉域名前缀),可以用正则捕获处理,比如先在规则的「条件」中添加:
再把变量值设为<add input="{REMOTE_USER}" pattern="^[^\\]+\\(.+)$" />{C:1}即可提取用户名部分
允许服务器变量的引用权限(可选)
如果一定要用LOGON_USER或AUTH_USER:- 在「URL Rewrite」模块的右侧菜单点击「查看服务器变量」
- 添加
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
相关产品推荐
相关产品推荐

