2012-09-30 192 views
2

我见过很多指南,其中自定义授权过滤器的实现涉及调用base.OnAuthorization(filterContext)作为最后一步。我有我自己的自定义授权过滤器,它可以完美工作,没有上述提及。但是,当我添加对base.OnAuthorization(filterContext)的调用时,即使所有检查都已成功传递,我的WebAPI服务仍会返回401。为什么我必须调用base.OnAuthorization(filterContext)

1)为什么我必须调用base.OnAuthorization? 2)它怎么会自己返回401?

编辑:我想它与默认的成员和角色提供者有关。由于我有点跳过这些,这可能是原因吗?

当我打电话base.OnAuthorization,我的反应成为401

回答

3

你不必调用,如果你处理一切自己。

但是,如果你这样做,授权逻辑将拉动用户(IPrincipal.Identity)出来的Thread.CurrentPrincipal,并且将拒绝授权(401),如果满足下列条件之一满足:

  • IPrincipal是空

  • IPrincipal.Identity未通过身份验证

  • IPrincipal.Identity进行身份验证,但不在已授权
    用户组,或者如果用户不在任何授权角色 (在属性上指定)

相关问题