我正在阅读一些关于 WebApi 授权的资源(书籍和 SO 答案)。
Suppose I want to add Custom Attribute which allows access only for Certain Users:
Case #1
我见过 overridingOnAuthorization
的这种方法,它在出现问题时设置响应
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ( /*check if user OK or not*/)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
案例二
但是我也看到了这个类似的例子,它也覆盖了 OnAuthorization
,但是调用了 base
:
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
// If not authorized at all, don't bother
if (actionContext.Response == null)
{
//...
}
}
然后,检查
HttpActionContext.Response
是否设置。如果未设置,则意味着请求已被授权,用户是 ok
案例三
但我也看到了这种覆盖 IsAuthorized
的方法:
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
if ( /*check if user OK or not*/)
{
return true;// or false
}
}
}
案例四
然后我看到一个类似的例子,但是调用 base.IsAuthorized (上下文) :
protected override bool IsAuthorized(HttpActionContext context)
{
if (something1 && something2 && base.IsAuthorized(context)) //??
return true;
return false;
}
还有一件事
最后,多米尼克说:
您不应该覆盖 OnAuthorization-因为您将错过[ AllowAnonymous ]处理。
Questions
1)我应该使用哪种方法: IsAuthorized
还是 OnAuthorization
? (或者什么时候使用哪种方法)
2)我应该什么时候打电话给 base.IsAuthorized or
基地?
3)他们就是这样建造的吗?如果响应为空,那么一切都好吗?(个案 # 2)
注意
请注意,我只使用(并且想使用)从 AuthorizationFilterAttribute
继承的 AuthorizeAttribute
Why ?
因为我在 http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api的第一阶段
不管怎样,我通过扩展 Authorize 属性询问。