Intranet 站点在使用匿名访问时要求凭据

Intranet site asking for credentials when using anonymous access

我正在开发一个内联网网站,通过 ASP.NET WebAPI 托管 RESTful 服务。

我遇到一个问题,所有浏览器(Chrome、Firefox 和 IE)都显示登录提示,要求凭据。我在启用匿名访问的 Windows 7 Home Premium 上的 IIS 7.5 中托管网站。

root URL http://localhost/RootAPI/ 应该对匿名用户可见,但是私有路由,例如http://localhost/RootAPI/Invoicehttp://localhost/RootAPI/Order 应仅供通过 [Authorize] 属性的经过身份验证的用户访问。一旦我解决了这个问题,我打算通过 AngularJS 使用 WebAPI 调用来控制身份验证过程。

我的网站使用 ASP.NET v4.0 应用程序池标识,我已为此用户分配了对应用程序文件夹的读取权限。

我还将 http://localhost 添加到 IE 的受信任站点列表中,并检查了 IE 的高级选项中的 'Allow Integrated Windows Authentication'。此外,在 Intranet 站点的自定义级别中检查了 'Automatic login with current user name and password',问题仍然存在。

我的 web.config 文件里有这个。

<authentication mode="None" />
<identity impersonate="true" />

查看 C:\inetpub\logs\LogFiles\W3SVC1 下的日志文件时,它不显示用户名(我希望看到匿名用户名)并显示 HTTP 状态 401。

我在这个令人沮丧的问题上花了两天时间,我无法阻止登录提示的出现。谁能指出我做错了什么的正确方向?

在发现正在执行自定义授权过滤器并检查控制器是否装饰有 [AllowAnonymousAttribute()] 并且没有装饰后,我设法解决了这个问题。

将此属性添加到根控制器后,我不再收到登录提示。

这是添加属性过滤器后根控制器的样子:

[AllowAnonymousAttribute()]
public class RootController : ApiController
{
    ...
}

根页面现在按预期显示。