我见过很多指南,其中自定义授权过滤器的实现涉及调用base.OnAuthorization(filterContext)作为最后一步。我有自己的自定义授权过滤器,它没有上面提到的完美工作。但是,当我添加对base.OnAuthorization(filterContext)的调用时,即使所有检查都成功通过,我的WebAPI服务也会返回401。
1)为什么我要打电话给base.OnAuthorization? 2)为什么它会自己返回401?
编辑:我认为这与默认会员和角色提供商有关。既然我不喜欢那些,那可能就是这个原因吗?一旦我调用base.OnAuthorization,我的响应变为401。
答案 0 :(得分:3)
如果您自己处理所有事情,则无需致电。
但是如果你这样做,授权逻辑会将用户(IPrincipal.Identity
)拉出Thread.CurrentPrincipal
,如果满足下列条件之一,将拒绝授权(401):
IPrincipal
为空
IPrincipal.Identity
未经过身份验证
IPrincipal.Identity
已通过身份验证,但未获得授权
用户组,或者用户未处于任何授权角色
(在属性上指定)