使用ASP.Net WebAPI时,我曾经使用过自定义Authorize属性来返回HTTP 403或401根据情况.例如,如果用户未经过身份验证,则返回401; 如果用户已通过身份验证但没有相应的权限,请返回a 403.有关详细信息,请参阅此处.
现在看来,在新的ASP.Net Core中,他们不希望你再次覆盖该Authorize属性,而是倾向于采用基于策略的方法.然而,似乎Core MVC遭受了401与其前辈相同的"只返回所有auth错误"的方法.
如何覆盖框架以获得我想要的行为?
我有一个ASP.NET Core站点,它对大多数页面使用cookie身份验证.对于这些页面,需要为未授权客户端提供302重定向的默认服务器响应.但是,该站点也接受API请求; 他们使用API密钥,不使用cookie.
理想情况下,我想完全关闭API URL的cookie处理,但最低限度,我需要确保如果API客户端未经授权,服务器不会响应302重定向.
authentication cookies http-redirect asp.net-identity-2 asp.net-core
我已从 Web 请求返回Forbid(),浏览器声称收到 404 而不是 403。
我已经向 cookie 身份验证添加了一个处理程序,如下所示......
o.Events.OnRedirectToAccessDenied += ctx =>
{
ctx.Response.StatusCode = (int)HttpStatusCode.Forbidden;
return Task.FromResult(0);
};
Run Code Online (Sandbox Code Playgroud)
但这似乎没有被调用。
那么,为什么应该返回 403 的方法却返回 404 呢?