如果我不想要质询和响应,可以使用身份验证过滤器

时间:2017-06-14 19:50:22

标签: c# asp.net-web-api2

我将使用HMAC来保护网络API。在每次向api控制器发出请求时,我想根据一些预先定义的标准检查请求是否有效。

我正在考虑构建自定义授权过滤器,但IAuthenticationFilter接口的其中一个方法会添加一个auth质询/响应。我不想这样做,所以我怎么能忽略那部分呢?或者,是否有更好的类型要实现(例如,动作属性)

https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/authentication-filters

1 个答案:

答案 0 :(得分:2)

您可以实现从System.web.Http派生的AuthorizeAttribute。 在此,您可以覆盖OnAuthorization方法以执行自定义授权。看看下面的例子。

     public class ApiAuthorizationFilterAttribute : AuthorizeAttribute {


    /// <summary>
    /// Performs custom authorization based on incoming request  
    ///  value(header)
    /// </summary>
    /// <param name="actionContext"></param>
    public override void OnAuthorization(HttpActionContext actionContext) {
        //Checking for any controller decorated with AllowAnonymousAttribute
        bool skipAuthorization = actionContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();
        if (skipAuthorization) {
            return;
        }

        if (!IsAuthorized(actionContext)) {

            actionContext.Response = ApiHttpResponseMessage.HandleUnauthorizedRequest(actionContext.Request);
            return;
        }
        if (!IsUserAuthorized(actionContext)) {
            actionContext.Response = ApiHttpResponseMessage.CreateResponse(actionContext.Request, ErrorMessages.INVALID_CMF_EXCEPTION_MESSAGE, HttpStatusCode.Forbidden);
        }
    }