[认证授权] 6.Permission Based Access Control

  • 时间:
  • 浏览:0

再比如,现在还要增加有有另一个 Scope book_reader ,它还还能能 了执行读取的操作,又要做出改变了吧。况且即使亲们把Scope和Role合二为一了,还是混乱不堪。

机会 sub 代表的用户自身拥有机会其所属的组织机构拥有(不管其是为何么组织管理的吧,最终亲们还还能能 知道你是什么 用户是否是 具有某有有另一个 角色) 图书管理员 你是什么 角色。则允许其访问books的哪几种操作。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意还要保留此段声明,且在文章页面明显位置给出原文连接,以后 保留追究法律责任的权利。

以上是我我本人的你是什么 理解和思路,以后 我发现了Apache Shiro你是什么 项目,感觉就像是找到了组织,Apache Shiro走的更远,以后 为Permission定义了一套规则。强烈建议读一读https://shiro.apache.org/permissions.html这篇文档。而.Net这边就这么这么好的福气了,,,Asp.Net Core中的默认授权过滤器还是传统的法律法律法律依据。

注意看红色的次要,为每有有另一个 操作都加进去去了有有另一个 Scope的描述。机会Access Token拥有user_manager你是什么 Scope(不管他是OAuth2的哪有有另一个 授权法律法律法律依据颁发的,亲们的最终代码次要只认Scope),这么对哪几种API的调用你是什么 被允许的,以后 视为无权操作。

https://shiro.apache.org/

其伪代码如下:

以上你是什么 我本人的你是什么 理解,如有错误,欢迎指正。

我我真是不止以上两种,比如在Asp.Net Core富含内置的哪几种授权控制组件:

这么造成哪几种问题的根本原困是哪几种?答:不管是Scope还是Role它们体现的都在有有另一个 隐式的描述信息,而都在某有有另一个 具体的操作行为的描述信息。既然亲们知道了其症结所在,这么为何么处置你是什么 问题呢?原理很简单,使用权限作为亲们的最小单元,把Scope和Role等等还有你是什么 的你是什么 管理组织权限的概念都作为有有另一个 上边层,禁止它们总出 在接口权限验证的地方,你是什么 仅作为管理组织Permission的手段存在。以后 改造上边的代码如下:

以上哪几种本质上和上边的基于Scope和基于Role的属于同两种类型。亲们你是什么 做当以后 能 工作,以后 问题来了,它们直观吗,灵活吗?繁琐吗?好用吗?能满足亲们变化的需求吗?总有着两种把简单的事情搞错综复杂的感觉。比如现在我增还要增加有有另一个 角色,超级管理员,这么上述的代码是都在还要亲们做出改变呢?

从此和讨厌的 [Authorize(Roles ="图书管理员",Policy ="XXX")] 说再见。

亲们把每有有另一个 操作都定义有有另一个 权限Permission,不管你是Access Token的Scope,还是Role,都在会在这里总出 。比如在检查超级管理员是都在能操作的日后,亲们还还能能 直接放行(把哪几种检查和亲们对接口的操作权限的描述分开)。机会是名为book_reader的Scope的日后,亲们让book_reader只关联books.readbook.read你是什么 个多 Permission,而你是什么 关联关系的管理,亲们是还还能能 通过数据存储来维持的,也很方便的提供管理页面来灵活的配置。而最终的代码上关心的你是什么 Permission你是什么 法律法律法律依据还还能能 称为Resource Based Access Control机会Permission Based Access Control

在前面5篇博客中介绍了OAuth2和OIDC(OpenId Connect),其作用是授权和认证。这么当亲们得到OAuth2的Access Token机会OIDC的Id Token日后,亲们的资源服务咋样来验证哪几种token是否是 有权限来执行对资源的某一项操作呢?比如我有有有另一个 API,/books,它具有如下四个操作:

这么亲们先看看基于OAuth2的Access Token,OIDC的Id Token和传统的基于角色的权限控制是咋样处置控制哪几种资源的操作。

https://docs.microsoft.com/en-us/aspnet/core/security/authorization/

强烈推荐:https://shiro.apache.org/permissions.html

https://stormpath.com/blog/new-rbac-resource-based-access-control

关于Id Token的用途以及其富含哪几种信息请参考Id Token。Id Token和Access Token的不同之存在于它一定是富含某有有另一个 用户的标识 sub ,以后 这么Scope,这是机会Id Token的用途是认证当前用户是谁,你是什么 用户是还要存在的;机会仅仅是认证,则还能能 富含被认证用户还还能能 做哪几种操作你是什么 的授权相关的事情。这么针对Id Token,亲们的API应该咋样进行权限管控呢?通常的做法是使用传统的基于校色的权限控制(Role Based Access Control)。我我真是现细节就不解释了,它的模型大致是:有有另一个 实体(用户机会组织)拥有一组角色,每有有另一个 角色代表着一组权限集合。感觉是都在和Scope很像呢,我我真是差这么来越多。亲们定义有有另一个 你是什么 的角色 图书管理员 吧。这里是故意和Scope的命名区分开的,机会其来源不同,这么亲们最终实现的日后也会是独立开来的。

亲们都知道OAuth2的最终产物是提供给亲们有有另一个 Access Token,而你是什么 Access Token中富含了有有另一个 Scope的字段,你是什么 字段代表的是授权服务器机会资源拥有者授予第三方客户端允许操作资源服务器的哪几种资源的范围。这里有你是什么 还要注意的是,你是什么 授权过程还还能能 有资源拥有着的参与(Authorization Code,Implicit,Resource Owner Password Credentials Grant),也还还能能 这么他的参与(Client Credentials Grant)。这么基于上述的books的资源,亲们还还能能 定义有有另一个  user_manager 的Scope,来控制对books的四个操作的权限控制。这么Books的基于Scope的权限控制看起来就像是你是什么 的:

不过基于Asp.Net Core的Filter:IAuthorizationFilter,亲们还还能能 把你是什么 整套授权控制法律法律法律依据给替换掉:使用代码:https://github.com/linianhui/oidc.example/tree/master/src/web.oauth2.resources;Filters代码:https://github.com/linianhui/oidc.example/tree/master/src/aspnetcore.filters.permissions。