ASP.NET MVC IIS 7 - Request.ServerVariables [“LOGON_USER”]返回空字符串

时间:2011-11-15 22:07:52

标签: asp.net-mvc forms-authentication iis-7.5

我的应用具有表单身份验证,但是当用户是管理员时我绕过了表单。我通过使用以下代码拉取用户名来完成此操作:

Request.ServerVariables["LOGON_USER"];

拉出后,我使用返回的名称对LDAP进行身份验证。在我的本地计算机上运行VS时,这很好用。

当我使用IIS运行时,此值为空。原因是我的应用程序启用了匿名身份验证。参考:http://support.microsoft.com/kb/306359

据我所知,我需要为具有表单身份验证的应用启用匿名身份验证。

无论如何我可以拉出登录到PC的用户吗?

更新:我得出的结论是我不能使用匿名身份验证。当我只有表单身份验证设置时,我收到以下错误:

HTTP Error 401.2 - Unauthorized
You are not authorized to view this page due to invalid authentication headers.

3 个答案:

答案 0 :(得分:3)

最后的答案是微软的解决方案,但我找到了真正的原因:

显然,已为C#

折旧了ServerVariables

所以对于C#,你需要这样做:

string login = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

我不想删除最后一个答案,因为它可能适用于在较早版本的C#上运行的人。

答案 1 :(得分:0)

您可以混合表单和Windows身份验证。请在此处查看类似的解决方案:http://www.pluralsight-training.net/community/blogs/craig/archive/2004/07/24/1699.aspx

您可能没有登录表单中描述的复选框,但您可以只检查HTTP标头中的LOGON_USER。

答案 2 :(得分:0)

知识库文章PRB: Request.ServerVariables("LOGON_USER") Returns Empty String in ASP.NET从未说明<authentication mode="Windows" />的位置。

<system.web>
  <authentication mode="Windows" />
</system.web>

显然,我也有这个问题,或者我不会在这里。