ASP.NET Web 应用程序——如何获取 Windows 用户?

Posted

技术标签:

【中文标题】ASP.NET Web 应用程序——如何获取 Windows 用户?【英文标题】:ASP.NET web application -- how to get Windows user? 【发布时间】:2022-01-21 03:33:58 【问题描述】:

我在 IIS 中运行的旧版 ASP.NET Framework 4.5 (Windows auth) 网站使用以下代码获取 Windows 用户 ID(以评估权限):

String Name = System.Environment.UserName;

查看此字符串的日志,未正确获取 Windows 用户 ID;而是获取应用程序池凭据对应的名称。

这是因为在web.config 中使用了模拟:

<identity impersonate="true" userName="app_user" password="xxxx" />

或者我可以更改 IIS 中的设置来更正此问题吗?

该网站曾经正常运行。 IIS 中发生了一些变化,但现在没有...

在web.config中,指定了windows认证:

<system.web>
<compilation debug="true" defaultLanguage="c#" targetFramework="4.5" />
<authentication mode="Windows" />. . .

更新:通过在 IIS 中为 Web 应用程序本身启用匿名身份验证(模拟),我能够克服这个问题。

【问题讨论】:

你不应该再在identity标签中设置userNamepassword。要为整个 Web 应用程序配置身份,您应该使用应用程序池身份。要在旧版 ASP.NET Web 应用程序中查询登录用户信息,请使用 Page.UserController.User。不知道您是如何开始使用此网络应用程序的,但互联网上有大量示例告诉您正确的方法。 您可以阅读我的博客文章了解更多详细信息,blog.lextudio.com/… 【参考方案1】:

使用以下代码获取 Windows 用户 ID(以评估权限):

字符串名称 = System.Environment.UserName;

如果您已经在您的 ASP.NET 应用程序中实现了 Windows 身份验证(实际上,以下代码就足够了):

<configuration>
  <system.web>
    ...
    <authentication mode="Windows"></authentication>
  </system.web>
</configuration>

通过System.Web.HttpContext.Current.User / System.Web.HttpContext.Current.User.Identity.Name 属性值检索必要的信息(无论您在哪里 - ASPX 页面代码隐藏、ASP.NET MVC 控制器、任何 ASP.NET 应用程序模块):

查看一些相关线程以了解差异: System.Web.HttpContext.Current.User.Identity.Name Vs System.Environment.UserName in ASP.NET

ASPX 页面代码隐藏:

protected void Page_Load(object sender, EventArgs e) 
    //Page.User
    ...

ASP.NET MVC 控制器:

public class HomeController : Controller 
    public ActionResult SomeActionMethod() 
        //User
    

任何 ASP.NET 应用程序模块:

public class X 
    public void Y() 
        //System.Web.HttpContext.Current.User
    

【讨论】:

对不起:我正在检索用户名的代码在后面的 ASPX 页面代码中。 检查我们的第一个代码 sn-p。 谢谢;该代码已经在 web.config 中。我会更新我的问题。 我的代码对你有用吗? 感谢您的代码。事实证明,该问题与禁用 IIS 匿名身份验证有关。我坚持使用原始代码。

以上是关于ASP.NET Web 应用程序——如何获取 Windows 用户?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Microsoft 身份平台身份验证在 ASP.NET Core Web 应用程序中获取 JWT 令牌?

使用 Asp.Net 在服务器上的 Web 应用程序文件夹之外获取 db 路径

asp.net mvc web窗体文件中如何获取HttpContextBase对象

ASP.NET (OWIN) Identity:如何从 Web API 控制器获取 UserID?

在回流中,我如何从 asp.net web api 获取数据

如何在 ASP.NET 中获取 Web 部件个性化提供者的对象?