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

ASP.NET WebForms迁移后Request.ServerVariables["LOGON_USER"]返回错误用户求助

问题分析与解决方案

核心原因

这个问题的根源是Azure App Gateway的后端连接复用机制:网关与IIS后端保持长连接池,当不同用户的请求复用同一后端连接时,Windows Authentication的身份上下文被错误共享,导致LOGON_USER返回其他用户的身份。直接访问服务器时无网关层的连接复用,因此不会触发该问题。

解决方案

1. 调整App Gateway连接复用策略

在Azure App Gateway的后端HTTP设置中,修改连接复用规则:

  • 开启连接耗尽(Connection Drain),设置合理超时(建议30秒),确保连接在闲置后被回收,避免跨用户复用
  • 或关闭保持活动(Keep Alive),强制每个请求建立独立的后端连接

2. 替换弃用的LOGON_USER变量

Request.ServerVariables["LOGON_USER"]已被官方弃用,改用ASP.NET标准身份获取方式,彻底规避服务器变量的上下文问题:

// 原代码
// string userName = Request.ServerVariables["LOGON_USER"];

// 替换为
string userName = User.Identity.Name;

3. 禁用IIS内核模式缓存

IIS的内核缓存可能意外留存身份相关上下文,需手动关闭:

  • 打开IIS管理器 → 目标站点 → 输出缓存 → 编辑功能设置 → 取消勾选"启用内核模式缓存"

4. 启用App Gateway会话亲和性

若业务允许,开启会话亲和性让同一用户请求固定路由到单台后端服务器,降低跨节点上下文复用概率:

  • 在App Gateway后端HTTP设置中,开启"会话亲和性",选择Cookie模式

5. 验证IIS Windows Auth配置

确保后端IIS配置无异常:

  • 仅启用Windows Authentication,禁用匿名认证
  • 移除站点中不必要的第三方缓存模块,避免干扰请求上下文

内容的提问来源于stack exchange,提问作者Mohammed Elrasheed Osman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:19:50