Windows Identity在ASP.NET请求管道中始终是匿名的

时间:2017-07-04 04:38:49

标签: c# asp.net-mvc authentication iis windows-authentication

我正在尝试为我的MVC站点创建一个简单的操作过滤器,用于检查当前Windows用户是否允许访问该站点。出于某种原因,filterContext.HttpContext.User.Identity对象始终设置为匿名,没有用户名。我试图在不同的阶段(OnAuthenticate和OnAuthorize)抓住它,但它总是匿名的。

我目前在IIS中启用了匿名 Windows身份验证(实际上遵循this example配置了Windows身份验证功能),我在system.web节点中有以下块我的web.config:

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

但由于某种原因,Identity始终是匿名的,没有用户名。我必须在这里遗漏一些东西。在IIS中设置Windows身份验证时,我总是会提示输入用户名/密码组合(实际上它因HTTP401.1错误0xc000006d而失败,但我认为这可能是因为我有一个用于开发的自定义主机头设置) 。我还阅读了一些文章,建议这是因为我的网站已确定位于 internet 区域,并且答案总是声明将网站添加到 Intranet 区域在Internet Explorer中。这似乎是一个创可贴修复,而不是实际的解决方案。

理想情况下,我想拥有以下内容:

  1. 用户浏览我的网站
  2. 在幕后,他们的Windows用户名被选中,并针对应用程序管理的允许用户进行身份验证
  3. 用户身份验证成功,页面加载,用户无需更加明智地进行身份验证
  4. 我需要做些什么来实现这个目标?

    提前感谢您的帮助。如果我能提供更多背景信息,请告诉我。

    编辑:忘记添加我在Windows 7 SP1,IIS 7.5上运行此功能

4 个答案:

答案 0 :(得分:1)

在解决方案资源管理器中,在项目上按 F4 ,如果从Visual Studio运行项目,则将 Windows身份验证更改为“启用”;

IIS 中选择网站 - &gt; 身份验证禁用 匿名身份验证,如果启用,请确保“ Windows身份验证

答案 1 :(得分:0)

尝试

<system.web>
    <identity impersonate="true" />
</system.web>

OR

点击项目而非解决方案=&gt;打开属性资源管理器右键单击属性=&gt;你会发现匿名身份验证设置为禁用

答案 2 :(得分:0)

您需要从iis禁用匿名身份验证并仅启用Windows身份验证。

答案 3 :(得分:0)

这两条规则在您的代码中的顺序错误

<allow users="*" />
<deny users="?" />

由于您首先允许所有人,因此甚至不评估第二条规则。

尝试切换它们

<deny users="?" />
<allow users="*" />

这样您首先拒绝匿名请求,以便身份验证管道甚至可以将401返回给客户端。当NTLM / Kerberos身份验证选择用户名时,第二个规则允许所有人(此时进行身份验证)。

为此,您还必须禁用匿名身份验证。