我正在使用string appNetworkUserId = WindowsIdentity.GetCurrent().Name;
来获取我的网络应用程序的当前用户。它在我本地运行机器时有效。我得到domain\my name
,但是当我在我的开发服务器上运行应用时,我得到NT AUTHORITY\NETWORK SERVICE
而不是访问该网站的用户。
如何获取访问我的webapp的访问者的用户名?
我正在使用.net 4.0和C#
答案 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();