C# Windows身份验证在服务器上不起作用

C# Windows身份验证在服务器上不起作用,c#,asp.net,webserver,C#,Asp.net,Webserver,我正在用ASP.NET和C#开发一个网站 我创建了该网站,因此当用户访问该网站时,其windows客户端用户名将通过以下内容读取: System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString(); 然后我在数据库中查找他的用户名,并从返回数据中创建一个包含所有必要数据(团队、名称、权限级别、角色等)的用户对象。 然后我将这个对象保存在会话变量中,直到用户注销 这在本地非常有效,但现在我已经部署到服务器上,我为每个用

我正在用ASP.NET和C#开发一个网站

我创建了该网站,因此当用户访问该网站时,其windows客户端用户名将通过以下内容读取:

System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString(); 
然后我在数据库中查找他的用户名,并从返回数据中创建一个包含所有必要数据(团队、名称、权限级别、角色等)的用户对象。 然后我将这个对象保存在会话变量中,直到用户注销

这在本地非常有效,但现在我已经部署到服务器上,我为每个用户都获得了
defaultAppPool

我做错了什么

在我的web.config文件中,我有:

authentication mode="Windows"

我必须承认这是我第一次自己进行部署,除此之外一切都进行得很顺利。

Windows身份验证和IIS 如果为ASP.NET应用程序选择Windows身份验证,则还需要在IIS中配置身份验证。这是因为Windows身份验证被委派回IIS。IIS为您提供了四种身份验证方法的选择:

  • 如果选择匿名身份验证,IIS不会执行任何身份验证。允许任何人访问ASP.NET应用程序
  • 如果选择基本身份验证,用户必须提供Windows用户名和密码才能连接。这些信息以明文形式通过网络发送,使得互联网上的基本身份验证非常不安全
  • 如果选择摘要身份验证,用户仍必须提供Windows用户名和密码才能连接。但是,在通过网络发送密码之前,会对密码进行哈希处理。摘要身份验证要求所有用户都运行Internet Explorer 5或更高版本,并且Windows帐户存储在Active Directory中
  • 如果选择Windows集成身份验证,则密码永远不会跨网络。用户必须仍然具有Windows用户名和密码,但Kerberos或质询/响应协议用于对用户进行身份验证。Windows集成身份验证要求所有用户都运行Internet Explorer 3.01或更高版本

  • 正如您所发现的,
    System.Security.Principal.WindowsIdentity.GetCurrent()
    为您提供应用程序池的标识


    您应该使用
    HttpContext.Current.User.Identity

    获取当前用户标识为:

    var userWinId = HttpContext.Current.User.Identity as WindowsIdentity;
    
    使用

    System.Web.HttpContext.Current.User.Identity.Name

    而不是

    User.Identity.Name


    System.Security.Principal.WindowsIdentity.GetCurrent().Name

    您是否已将IIS配置为使用windows身份验证(并禁用匿名)?非常抱歉,但这是一个非常愚蠢的错误。System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();需要为HttpContext.Current.User.Identity.Name;这给了我正确的用户名。