当应用程序在 IIS 中运行时,如何从 Request.ServerVariables("LOGON_USER") 获取值?

Posted

技术标签:

【中文标题】当应用程序在 IIS 中运行时,如何从 Request.ServerVariables("LOGON_USER") 获取值?【英文标题】:How can i get the value from Request.ServerVariables("LOGON_USER") when the application is running in IIS? 【发布时间】:2011-02-13 20:12:42 【问题描述】:

我没有使用任何内置的身份验证机制,只是构建了一个需要登录的简单 Intranet 站点。

但我被要求检索用户的当前 Windows 登录名,并使用此信息对他进行身份验证。

从我的盒子中读取 Request.ServerVariables("LOGON_USER") 信息时,一切正常。但是当应用程序在我的服务器上使用 IIS 运行时,此值始终为空。

有什么想法吗?

【问题讨论】:

我不确定你是否可以不强制<authentication mode="Windows"/>。您不希望他们看到 any 登录机制,但仍然能够基于登录对他们进行身份验证?如果可能的话,那将是一个安全漏洞。 【参考方案1】:

为了找出用户是谁,您需要对他们进行身份验证。这就是身份验证的定义。

更改您的 web.config 以包括:

<authentication mode="Windows"/>

在 system.web 元素内。这将使用 Windows 身份验证,即。用户通过您的内部 Windows 域控制器进行身份验证,而无需输入用户名 + 密码,使用基于 Windows 的安全性。这非常适合基于 Intranet 的 Web 应用程序。因此,如果您目前正在这样做,那么您可以取消基于用户名 + 密码的登录。

参考:How to Use Windows Authentication in ASP.NET 和:Explained: Windows Authentication in ASP.NET 以获得更多深度

如果您的意图是根据用户的 Windows 帐户自动限制对网络资源的访问,您可能需要考虑使用模拟,这意味着 ASP.NET 就像在用户的 Windows 帐户的上下文中运行一样,并且与该帐户关联的所有用户权限都会有效地传递给您的 ASP.NET 应用程序。

顺便说一句,我认为 Request.ServerVariables("LOGON_USER") 是旧的 ASP 经典方式。请改用 HttpContext.Current.User.Identity.UserName。

【讨论】:

以上是关于当应用程序在 IIS 中运行时,如何从 Request.ServerVariables("LOGON_USER") 获取值?的主要内容,如果未能解决你的问题,请参考以下文章

当程序在 IntelliJ 中运行时,为啥我会收到 SSLHandshakeException 作为 JAR?

当应用程序未在 React-Native firebase 中运行时如何设置通知声音

System.NullReferenceException 用于在 Windows 服务器 IIS 上运行但在 Visual Studio IIS Express 中运行时在本地运行的 .NET 服务

从 IIS 上的 ASP.NET Core 应用程序请求超时

当 cobertura 测试在 maven-cobertura-plugin 中运行时如何配置?

当应用程序在权限处理中运行时,颤振蓝牙给出错误