获取用户的Windows登录信息返回NETWORK SERVICES

时间:2014-05-01 11:54:09

标签: c# asp.net impersonation

我正在尝试从服务器登录用户的Windows,我尝试的所有方法都会返回网络的详细信息。

我确实在我的web.config中放了<identity impersonate="true">但没有帮助。

这是我的webconfig:

<?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退回空白或网络详细信息。任何解决方案??

1 个答案:

答案 0 :(得分:2)

如果整个网站需要Windows身份验证,则应确保禁用匿名身份验证。为此:

  1. 打开Internet信息服务(IIS)管理器。
  2. 选择您的网络应用程序并打开身份验证功能。
  3. 确保已禁用“匿名身份验证”并启用“Windows身份验证”。
  4. 禁用匿名身份验证后,id2id3的代码将拥有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凭据,而其他浏览器会显示登录提示。