ASP.NET mvc 3 匿名授权不工作

ASP.NET mvc 3 Anonymous Authorization not working

我有一个奇怪的问题,当然只发生在我们的生产箱上。它适用于我们的测试服务器和我的盒子。

我有一个 ASP.NET MVC 3 控制器,用于公开 RESTful API。我已经允许匿名用户使用下面显示的代码调用这些服务。通过 GET 调用这些方法工作得很好(使用 WebRequest)。但是,当尝试 POST 数据(使用 HttpClient)时,它失败并出现 401 错误。

此 Web 服务托管在另一个使用 Windows 身份验证的 IIS 站点中。但是我将此目录配置为允许匿名和禁用 windows 身份验证。它位于主站点下的 /Areas/Services。

我已将 IIS 配置为允许匿名身份验证,甚至在 web.config 中启用了它。但是,当我尝试向此控制器发送 POST 数据时,我返回“401 - 未经授权:由于凭据无效,访问被拒绝”。我不要任何凭证!同样,同一控制器上的 GET 匿名工作正常。

这似乎是一个配置问题(因为它在 QA 中有效)但我不知道要配置任何其他内容。我已经为 anonymous/windows/forms 身份验证配置 IIS 网站 10 年了,但以前从未 运行 进入过类似的东西。

下面是允许 MVC 3 为任何人提供这些方法的代码:

[AuthorizeAnonymous]
public class LtWebsiteController : Controller
{
...
}

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class AuthorizeAnonymousAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (!(filterContext.Controller is LtWebsiteController))
            base.OnAuthorization(filterContext);
    }
}

这让我抓狂!请帮忙

您可能缺少用于 NTLM 身份验证的 HTTP headers。我将配置 HttpClient 以将正确的凭据作为请求的一部分发送。

HttpClientHandler handler = new HttpClientHandler()
{
    UseDefaultCredentials = true
};

HttpClient client = new HttpClient(handler);

由于您启用了匿名身份验证,因此令人困惑。但是,对于 Windows 身份验证,请求需要具有适当的 headers。 401 告诉我服务器完全拒绝了 HTTP 请求。

http://www.asp.net/web-api/overview/security/integrated-windows-authentication