ASP.NET mvc 3匿名授权不起作用

时间:2015-03-27 13:35:12

标签: asp.net asp.net-mvc asp.net-mvc-3 anonymous

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

我有一个ASP.NET MVC 3控制器,用于公开RESTful API。我已让匿名用户使用下面显示的代码调用这些服务。通过GET调用这些方法可以正常工作(使用WebRequest)。但是,在尝试POST数据时(使用HttpClient),它会因401错误而失败。

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

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

这似乎是一个配置问题(因为它适用于QA),但我不知道任何其他配置事项。我已经为匿名/ windows / forms auth配置了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);
    }
}

这让我疯了!请帮忙。

1 个答案:

答案 0 :(得分:1)

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

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

HttpClient client = new HttpClient(handler);

由于您启用了匿名身份验证,因此令人困惑。但是,使用Windows身份验证时,请求需要具有正确的标头。 401告诉我服务器扁平化拒绝HTTP请求。

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