【问题标题】:ASP.NET mvc 3 Anonymous Authorization not workingASP.NET mvc 3匿名授权不起作用
【发布时间】:2015-05-31 20:33:24
【问题描述】:

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

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

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

我已将 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);
    }
}

这快把我逼疯了!请帮忙。

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 谢谢!我一直在寻找一种方法来告诉它使用默认凭据,但忘记了 HttpClientHandler。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2015-11-01
    • 1970-01-01
    • 2011-09-03
    • 2019-07-04
    • 2012-01-22
    相关资源
    最近更新 更多