我将使用HMAC来保护网络API。在每次向api控制器发出请求时,我想根据一些预先定义的标准检查请求是否有效。
我正在考虑构建自定义授权过滤器,但IAuthenticationFilter接口的其中一个方法会添加一个auth质询/响应。我不想这样做,所以我怎么能忽略那部分呢?或者,是否有更好的类型要实现(例如,动作属性)
https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/authentication-filters
答案 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);
}
}