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

迁移至Windows Server2022后某ASP.NET WebService无法获取User.Identity.Name

ASP.NET旧WebService迁移至Windows Server2022的身份验证问题

我正将一款Windows XP时代的旧ASP.NET应用迁移至Windows Server2022。同一机器运行服务端与客户端时程序正常,但服务端移至Windows Server2022后,其中一个WebService(WebService1)无法通过User.Identity.Name获取用户名,另一关联WebService(WebService2)可正常获取。

两者IIS身份验证设置完全一致:禁用匿名身份验证、ASP.NET模拟、表单身份验证,启用Windows身份验证。预期通过Windows身份验证实现用户免密登录。

本地管理员账号测试显示,两个WebService均可通过WindowsIdentity.GetCurrent().Name获取到IIS APPPOOL\DefaultAppPool,符合预期。问题出在Session_Start()事件中访问User.Identity:WebService1触发异常,错误信息为“Public member 'Identity' on type SecurityIdentifier not found at Microsoft.VisualBasic.CompilerServices.Symbols.Container.GetMembers(...)”;WebService2则可正常获取MyDomain\MyName格式的正确用户名。

已将新服务器上WebService1的Web.config与原正常服务器配置对齐,但问题依旧,且因差异过大无法与WebService2的Web.config对齐。

临时方案(均存在问题)

  • 使用My.User.Name:需启用WebService1的匿名身份验证,此时Windows安全中心会弹出密码提示(已启用Windows身份验证),输入密码后可获取用户名,但每次启动程序都会重复提示,即使勾选“记住凭据”。
  • 使用My.User.CurrentPrincipal.Identity.Name:需禁用匿名身份验证,同样会触发密码提示,输入后可获取用户名,但仍无法访问User.Identity。

客户端配置情况

客户端EXE程序已在Visual Studio2017项目属性中启用“使用Windows身份验证”(项目属性→服务→启用客户端应用服务→使用Windows身份验证)。

尝试过的无效方案

尝试为WebService1的VB代码添加<Authorize>属性,但需引入Microsoft.AspNetCore.Authorization命名空间,在Visual Studio2017中无法找到该命名空间及对应DLL,且WebService2的C#代码无此属性仍正常工作,故怀疑此方案无效。

问题列表

  1. 为何IIS设置相同,WebService1无法访问User.Identity而WebService2可以?
  2. 为何启用WebService1的匿名身份验证后,Windows安全中心仍会弹出密码提示?如何停止该提示?
  3. 是否有其他方法强制客户端EXE始终使用Windows身份验证?
  4. 如何测试WebService1是否确实使用Windows身份验证?直接在浏览器访问两个WebService的URL均会弹出账号密码提示,但WebService2实际可正常使用Windows身份验证,故该测试无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:55:20