如何在IIS 10中通过重写将Windows用户名存入请求头?
实现IIS 10中通过URL重写将Windows验证用户名存入请求头
完全可以简便实现,借助IIS的URL重写模块即可完成,无需额外开发。具体操作如下:
前提准备
确保你的IIS已安装URL重写模块(若未安装,可通过「服务器管理器」-「添加角色和功能」-「Web服务器(IIS)」-「Web服务器」-「性能」下勾选安装)。
方法一:通过IIS图形界面配置
- 打开IIS管理器,选中目标站点,双击「URL重写」功能。
- 右侧操作栏点击「添加规则」,选择「空白规则」。
- 规则名称:填写便于识别的名称,比如「注入Windows用户名到请求头」。
- 匹配URL:模式设置为
.*,应用范围选择「所有请求」。 - 条件:点击「添加」,条件输入选择
{LOGON_USER},检查输入字符串选「匹配模式」,模式填写.+(确保仅当存在已验证的用户名时触发规则)。 - 操作:操作类型选「重写」,重写URL填写
{R:0}(保持原请求路径不变);切换到「服务器变量」标签,点击「添加」,变量名填HTTP_X_WINDOWS_USERNAME(自定义请求头需以HTTP_为前缀,IIS会自动转换为标准请求头格式),变量值填{LOGON_USER},勾选「替换服务器变量的值」。 - 点击「应用」保存规则。
方法二:直接修改web.config配置
如果偏好手动配置配置文件,可在站点根目录的web.config中添加以下规则(若已有<rewrite>节点,直接合并规则即可):
<configuration> <system.webServer> <rewrite> <rules> <rule name="Inject Windows Username to Request Header" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{LOGON_USER}" pattern=".+" /> </conditions> <serverVariables> <set name="HTTP_X_WINDOWS_USERNAME" value="{LOGON_USER}" /> </serverVariables> <action type="Rewrite" url="{R:0}" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
关键说明
{LOGON_USER}是IIS内置服务器变量,存储的正是已通过Windows身份验证的用户名,和你日志中看到的内容一致。- 自定义请求头名称可按需修改,但必须遵循IIS规则:以
HTTP_开头,最终后端读取时会自动转换为短横线分隔的格式(比如HTTP_X_WINDOWS_USERNAME对应请求头X-Windows-Username)。 - 测试时可在后端代码中读取该请求头,例如ASP.NET中用
Request.Headers["X-Windows-Username"],其他语言框架同理。
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

