我正在阅读有关WebApi中授权的几种资源(书籍和答案)。
假设我要添加仅允许某些用户访问的自定义属性:
情况1
我已经看到了这种覆盖的 方法, OnAuthorization
如果出现问题,它会设置响应
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ( /*check if user OK or not*/)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
情况#2
但我也看到了类似的示例,该示例也很重要, 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
已设置。如果未设置,则表示请求已授权且用户正常
情况#3
但是我也看到了这种覆盖的方法IsAuthorized
:
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
if ( /*check if user OK or not*/)
{
return true;// or false
}
}
}
情况#4
然后我看到了类似的示例一,但是调用了base.IsAuthorized(context):
protected override bool IsAuthorized(HttpActionContext context)
{
if (something1 && something2 && base.IsAuthorized(context)) //??
return true;
return false;
}
还有一件事
最后多米尼克在这里说 :
您不应覆盖OnAuthorization-因为您将缺少[AllowAnonymous]处理。
问题
1)我应该使用哪种方法:
IsAuthorized
或OnAuthorization
?(或何时使用哪个)2)我
base.IsAuthorized or
什么时候应该呼叫base.OnAuthorization`?3)这是他们如何建造的?那如果响应为空,那么一切正常吗?(案例2)
NB
请注意,我仅使用(并且想使用)AuthorizeAttribute
已经继承自 AuthorizationFilterAttribute
为什么呢
因为我处在第一阶段:http : //www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
无论如何我通过扩展Authorize属性询问。