2016-02-09 37 views
1

我有一个.NET网站,它评估用户域帐户并从Active Directory获取一些详细信息。
在本地通过Visual Studio运行时,这很好,但部署时启用了Windows身份验证(没有启用其他身份验证类型),我似乎只能获取正在运行应用程序池的用户的名称。
是否有具体的方式来获取实际登录的用户而不是应用程序池用户? 目前得到的用户名是这样的:将Windows用户名传递给网站

string _user = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Remove(0, 8); 

也曾尝试

Page.User.Identity.Name; 
+1

是部署域的服务器吗? – Mark

+0

应用程序已配置Windows身份验证并且服务器位于域中。 – DarkW1nter

+0

@ DarkW1nter,你可以显示你正在用来获取用户的代码行吗?你的网页也有任何登录屏幕..? – MethodMan

回答

1

你需要尝试一些不同的方式来获取Active Directory的信息有些时候。这里有一些的,在其他帖子显示的方式:

string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 
string userName = Environment.UserName; 
string userName = HttpContext.Current.User.Identity 

只需添加这些,调试通过,看看他们正在返回的IIS用户名也是如此。

这里有两个不同的windows用户 - 第一个是你的应用程序用户,第二个是你的ASP.NET应用程序(IIS角度的应用程序池)正在运行的用户(或Windows帐户)。 WindowsIdentity.GetCurrent通常会返回此引用。

要获得使用该应用程序的实际Windows用户,您必须强制进行身份验证。为此,您可以在IIS中为该网站启用集成身份验证(Windows身份验证)。还要修改您的ASP.NET配置以使用Windows身份验证。现在你可以使用HttpContext.Current.User.Identity来获取实际的用户。

<authorization> 
    <deny users="?" /> 
    <allow users="*" /> 
</authorization> 
<authentication mode="Windows" /> 
+0

按照你的说法进行配置,使用HttpContext,但从服务器浏览时仍然获取应用程序池用户,但在远程浏览时无法进行身份验证,因此我怀疑这是我需要让服务器人员查看的权限问题。谢谢 – DarkW1nter

+0

您可以尝试禁用匿名身份验证。见上面 – MUlferts

+0

我只启用了Windows身份验证,允许所有用户。当浏览证书对话框出现时,不应该像我的用户对服务器有权限一样。 – DarkW1nter