2

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

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

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

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

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

我究竟做错了什么?

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

authentication mode="Windows"

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

4

4 回答 4

4

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

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

于 2012-12-10T21:28:06.807 回答
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 或更高版本。
于 2012-12-10T18:21:31.117 回答
0

获取当前用户身份为:

var userWinId = HttpContext.Current.User.Identity as WindowsIdentity;
于 2015-05-15T17:40:59.873 回答
0

采用

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

代替

User.Identity.Name

或者

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

于 2017-08-18T20:02:02.577 回答