2012-12-10 59 views
1

我正在ASP.NET和C#中开发一个网站。Windows身份验证在服务器上不起作用

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

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

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

这是工作就像一个魅力本地,但现在,我已经部署到服务器上,我得到defaultAppPool为每一位用户。

我在做什么错?

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

authentication mode="Windows" 

我不得不承认,这是第一次,我做了部署自己,一切都进行得很顺利,除了这一点。

+3

您是否还配置了IIS以使用Windows身份验证(并禁用匿名)? –

+1

真的很抱歉,但这真是一个非常愚蠢的错误。 System.Security.Principal.WindowsIdentity.GetCurrent()。Name.ToString(); 需要为 HttpContext.Current.User.Identity.Name; 这给了我正确的用户名。 – Jelle

回答

2

正如您发现的那样,System.Security.Principal.WindowsIdentity.GetCurrent()为您提供了应用程序池的身份。

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

1

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

  1. 如果您选择匿名身份验证,IIS将不会执行任何身份验证。任何人都可以访问ASP.NET应用程序。
  2. 如果您选择基本身份验证,用户必须提供Windows用户名和密码才能连接。这些信息以明文形式通过网络发送,使得基本认证在互联网上危险不安全。
  3. 如果您选择摘要式身份验证,用户仍然必须提供Windows用户名和密码才能连接。但是,密码在通过网络发送之前被散列。摘要式身份验证要求所有用户都运行Internet Explorer 5或更高版本,并将Windows帐户存储在Active Directory中。
  4. 如果您选择Windows集成身份验证,则密码不会跨网络。用户仍然必须拥有Windows用户名和密码,但使用Kerberos或质询/响应协议来验证用户身份。 Windows集成身份验证要求所有用户都运行Internet Explorer 3.01或更高版本。
0

获取当前用户的身份为:的

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

使用

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

代替

User.Identity.Name

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