新文章 网摘 文章 随笔 日记

WebApi自定义权限过滤器注意事项

1、使用表单认证必须在web.config中添加以下配置:
<!--配置表单身份验证-->

<authentication mode="Forms">
<forms name="BearerSparePart" loginUrl="http://localhost:58506/Authorize/SignIn" />
</authentication>

 

否则 var id = filterContext.HttpContext.User.Identity as FormsIdentity;
会取不到数据

2、Mvc的AuthorizeAttribute与Api是不同的。

WebApi2.0可能会不触发继承于AuthorizationFilterAttribute的类,正确的是要继承于Attribute, System.Web.Http.Filters.IAuthenticationFilter而不是AuthorizationFilterAttribute,注意命名空间。


MVC和API异同:

其中全局注册,针对MVC和API还有一些差异:

  MVC在 FilterConfig.cs中注入
    filters.Add(new XYHMVCAuthorizeAttribute());

  API 在 WebApiConfig.cs 中注入

    config.Filters.Add(new XYHAPIAuthorizeAttribute());

3、当继承于Attribute, System.Web.Http.Filters.IAuthenticationFilter时,ChallengeAsync方法是在无权限时返回的结果,如果在AuthenticateAsync方法中已有设定返回,则此处可以直接不作任何操作,如下:

/// <summary>
/// 没有权限时执行的方法
/// </summary>
/// <param name="context"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken)
{
    return Task.FromResult(0);
}

 参考:https://stackoverflow.com/questions/55394001/authentication-filter-not-working-with-authorization-filter-in-web-api

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

posted @ 2020-11-23 15:41  岭南春  阅读(127)  评论(0)    收藏  举报