Windows身份验证无法在服务器上运行

时间:2012-12-10 15:30:28

标签: c# asp.net webserver

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

我创建了网站,所以当用户访问该网站时,他的Windows客户端用户名将被读出:

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

然后我在数据库中查找他的用户名,并从返回数据创建一个包含所有必要数据(团队,名称,权限级别,角色......)的用户对象。 然后我将此对象保存在会话var中,直到用户注销。

这本身就像魅力一样,但现在我已经部署到服务器,我为每个用户提供了defaultAppPool

我做错了什么?

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

authentication mode="Windows"

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

获取当前用户身份:

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

答案 3 :(得分:0)

使用

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

而不是

User.Identity.Name

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