获取用户的 windows 登录返回 NETWORK SERVICES
Posted
技术标签:
【中文标题】获取用户的 windows 登录返回 NETWORK SERVICES【英文标题】:Get user's windows login returns NETWORK SERVICES 【发布时间】:2014-05-01 11:54:09 【问题描述】:我正在尝试从服务器获取用户的 Windows 登录信息,并且我尝试的所有方法都返回了网络的详细信息。
我确实将<identity impersonate="true">
放在了我的 web.config 中,但没有任何帮助。
这是我的网络配置:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
</appSettings>
<system.web>
<authentication mode="Windows"/>
<identity impersonate="true"/>
<compilation targetFramework="4.5" debug="true"/>
<httpRuntime targetFramework="4.5"/>
<sessionState timeout="20"/>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
</configuration>
这是我的 C# 调用:
string id1 = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
string id2 = Page.User.Identity.Name;
string id3 = Request.LogonUserIdentity.Name;
所有 3 个返回为空或包含网络详细信息。有什么解决办法??
【问题讨论】:
您想要哪个用户 - 应用程序的最终用户(登录网站的用户),还是应用程序在服务器上运行的用户?这些是完全不同的用户 登录应用程序的用户,最终用户。感谢您的区别。 这取决于您如何处理登录过程。能发下相关代码吗? 我没有处理任何登录过程,我只是想按上述方式获取 Windows 登录名。 知道怎么做吗? 【参考方案1】:如果您的整个网站都需要 Windows 身份验证,则应确保禁用匿名身份验证。这样做:
-
打开 Internet 信息服务 (IIS) 管理器。
选择您的 Web 应用程序并打开身份验证功能。
确保禁用“匿名身份验证”并启用“Windows 身份验证”。
一旦禁用匿名身份验证,id2
或 id3
的代码将包含 Windows 登录信息。您的id1
代码将报告应用程序池的身份。
如果您的网站只有一部分需要身份验证而其他部分不需要,那么您的 web.config 应该定义授权规则(并且匿名身份验证应该保持启用)。例如,您可以默认拒绝匿名用户访问所有页面,但特别允许匿名访问 Default.aspx。
<configuration>
<system.web>
...
<authorization>
<deny users="?"/>
</authorization>
...
</system.web>
<location path="Default.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
</configuration>
Windows 身份验证不需要您的应用程序实现登录过程。它将向浏览器发出身份验证质询。某些浏览器(例如 IE)会自动提供 Windows 凭据,而其他浏览器(例如 Firefox)会显示登录提示。
【讨论】:
以上是关于获取用户的 windows 登录返回 NETWORK SERVICES的主要内容,如果未能解决你的问题,请参考以下文章
在VC中获取Windows XP,Windows 7当前登录用户名[关闭]
SQL Server 返回错误“用户 'NT AUTHORITY\ANONYMOUS LOGON' 登录失败。”在 Windows 应用程序中