在webapp中获取当前的Windows用户

时间:2014-10-17 17:12:41

标签: c# .net-4.0 authorization windows-authentication

我正在使用string appNetworkUserId = WindowsIdentity.GetCurrent().Name;来获取我的网络应用程序的当前用户。它在我本地运行机器时有效。我得到domain\my name,但是当我在我的开发服务器上运行应用时,我得到NT AUTHORITY\NETWORK SERVICE而不是访问该网站的用户。

如何获取访问我的webapp的访问者的用户名?

我正在使用.net 4.0和C#

3 个答案:

答案 0 :(得分:1)

您获得NT AUTHORITY\NETWORK SERVICE,因为这是运行IIS的标识。您在开发环境中获得自己的名称,因为那里的Web服务器作为您登录的用户而不是系统用户运行。

如果您使用ASP.Net MVC中的身份验证框架,则可以检查

User.Identity.Name

在控制器动作中。

答案 1 :(得分:1)

首先,您需要设置网站以使用NTLM或集成Windows身份验证。否则,远程用户将不会被Windows身份验证用户认证,您无法确定其用户帐户。

请参阅此处查看身份验证模式。

http://msdn.microsoft.com/en-us/library/ee825205(v=cs.10).aspx

http://technet.microsoft.com/en-us/library/cc733010(v=ws.10).aspx

配置完成后,您可以通过以下方式获取当前用户:

using System.Security.Principal;

// Obtain the authenticated user's Identity
WindowsPrincipal winPrincipal = (WindowsPrincipal)HttpContext.Current.User;

答案 2 :(得分:1)

这是我最终使用的内容。这很有效。

 System.Security.Principal.WindowsIdentity wi = System.Security.Principal.WindowsIdentity.GetCurrent();
 string[] a = Context.User.Identity.Name.Split('\\');
 string appNetworkUserId = Context.User.Identity.Name.ToString();