2

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

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

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

一旦我调用 base.OnAuthorization,我的响应就会变成 401。

4

1 回答 1

3

如果您自己处理所有事情,则不必调用它。

但是,如果您这样做,授权逻辑会将用户 ( IPrincipal.Identity) 拉出Thread.CurrentPrincipal并在满足以下条件之一时拒绝授权 (401):

  • IPrincipal一片空白

  • IPrincipal.Identity未通过身份验证

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

于 2012-09-30T21:15:55.877 回答