当应用程序在 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 应用程序请求超时