C# Windows身份验证在服务器上不起作用
我正在用ASP.NET和C#开发一个网站 我创建了该网站,因此当用户访问该网站时,其windows客户端用户名将通过以下内容读取:C# Windows身份验证在服务器上不起作用,c#,asp.net,webserver,C#,Asp.net,Webserver,我正在用ASP.NET和C#开发一个网站 我创建了该网站,因此当用户访问该网站时,其windows客户端用户名将通过以下内容读取: System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString(); 然后我在数据库中查找他的用户名,并从返回数据中创建一个包含所有必要数据(团队、名称、权限级别、角色等)的用户对象。 然后我将这个对象保存在会话变量中,直到用户注销 这在本地非常有效,但现在我已经部署到服务器上,我为每个用
System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
然后我在数据库中查找他的用户名,并从返回数据中创建一个包含所有必要数据(团队、名称、权限级别、角色等)的用户对象。
然后我将这个对象保存在会话变量中,直到用户注销
这在本地非常有效,但现在我已经部署到服务器上,我为每个用户都获得了defaultAppPool
我做错了什么
在我的web.config文件中,我有:
authentication mode="Windows"
我必须承认这是我第一次自己进行部署,除此之外一切都进行得很顺利。Windows身份验证和IIS 如果为ASP.NET应用程序选择Windows身份验证,则还需要在IIS中配置身份验证。这是因为Windows身份验证被委派回IIS。IIS为您提供了四种身份验证方法的选择:
正如您所发现的,
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;这给了我正确的用户名。