我正在为分析师构建Intranet MVC 4应用程序。目标是允许内部用户访问此应用程序,而无需签名,因为他们是我们内部网络的一部分。当他们访问应用程序时,我希望能够捕获他们的Windows用户名并使用LDAP检查活动目录并检索他们所属的部门并在屏幕上显示相关详细信息。根据不同论坛的建议,我为此应用程序选择了Windows身份验证,并且我能够测试从Visual Studio成功运行的应用程序。我遇到的麻烦是我将它部署到运行IIS 7.5的UAT服务器上。
<authentication mode="Windows">
</authentication>
<identity impersonate="false" />
这是我的Web.config文件的当前状态。无论模拟是真还是假,应用程序似乎都不会捕获访问应用程序的浏览器的Windows用户名。是
impersonate = true
需要这个吗?在主页上的欢迎消息中,我总是看到托管应用程序/ IIS正在运行的计算机的Windows用户名。我尝试了多种方法来捕获传入用户请求的Windows用户名。
string name = System.Web.HttpContext.Current.User.Identity.Name;
string name = System.Web.HttpContext.Current.Request.LogonUserIdentity.Name;
string name = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
string name = System.Web.HttpContext.Current.Request.ServerVariables["LOGON_USER"].Name;
等。我还在这里查看了其他几个帖子,例如this。但我无法让它发挥作用。我担心我试图意外地实现这一点,而不是真正理解发生了什么?有人可以指导我朝正确的方向发展吗?
答案 0 :(得分:2)
不,你误解了冒充的目的。
首先,在集成模式下运行的IIS 7或更高版本中不再支持模拟。
其次,冒充的目的是改变用户&#34;工作进程在运行时运行,特别是允许以该用户身份访问文件系统或数据库资源。它与一般的身份验证无关,对大多数Web应用程序来说并不是特别有用。
您希望使用Windows身份验证,但是您应该知道这只适用于Internet Explorer。它也只适用于加入您的域的服务器,并且没有任何中间Kerberos身份验证问题。 (这些通常被称为&#34;双跳&#34;问题)。默认情况下,其他浏览器不会自动提供Active Directory帐户信息,但有些浏览器可能配置为允许它这样做,而其他浏览器则不允许。
如果您正在使用具有Windows身份验证的正确配置的服务器,并且您正在使用支持ActiveDirectory Kerberos票证直通的浏览器,并且没有可能导致此直通问题的网络问题,那么您可以使用{{1}获取用户名。
不要使用LogonName或类似的东西,因为它们只会为您提供工作进程,而不是经过身份验证的用户名。