前面几篇文章介绍了单点登录的本质,包括cookie、session、重定向的基本概念,单点登录的基本交互流程,cookie的重要性和安全问题。单点登录能够确保:必须通过身份验证后,才能访问网站,且访问多个系统时,只需要登录一次。
该系列的完整写作计划,可见:系列概述
一般系统都会有多个角色,不同角色可访问的系统功能不同,通过给用户分配不同角色,决定用户可访问的系统功能。
继续介绍「单点登录与权限管理」系列的第一部分:单点登录与权限管理本质,本篇说说权限管理,主要从以下几个方面介绍:
- 权限管理的一般模型
- 权限验证范围
- Shiro基本架构和扩展点
- 系列第一部分总结
权限管理的一般模型
权限验证的过程比较简单,描述如下:
- 用户登录成功后,会将自己的个人信息和权限信息,保存到session中,可以存储在内存、redis中;
- 用户访问其他页面时,会根据访问路径,与用户权限数据进行匹配,验证是否有权限访问;
- 如果有权限,显示访问页面,如果无权限,提示用户无权访问;
如何管理和分配用户权限呢,一般会抽象出如下实体概念:
- 用户:访问系统的主体;
- 角色:分配权限的最小单元,通过角色给用户分配权限;
- 权限菜单:权限的最小单元,一个角色配置多个权限菜单;
另外,为了方便权限管理,会单独抽取一个服务「用户中心」,统一管理用户、角色和各个系统的权限菜单。权限菜单由各个子系统同步到「用户中心」或者提供批量导入的功能,权限菜单标识的规则要提前约定好,一致的菜单标识有助于权限拦截的判断。
简单截取几个我们项目中的页面,加深下理解:
-
添加用户时,需要选择角色
-
添加角色时,需要选择权限菜单
-
权限菜单由各个子系统同步过来
权限验证范围
用户拥有了访问和操作某些数据的权限,但不代表可以访问所有的数据,可能只能访问和操作自己的数据,可能只能访问和操作组内的数据,这是更细粒度的权限控制。
权限验证的位置可能在前端、可能在后端。前端根据当前用户的权限,显示不同的菜单项、操作按钮,后端根据当前用户的权限,验证操作的合法性,返回可访问的数据集合,权限验证位置也要考虑全面。
控制粒度
比如有这样一个场景:有一个查询订单接口供外部调用,可根据订单编号返回订单详情。
如果订单编号有规则可寻,且后端不对订单所属人进行判断,就可以查看其他人订单的信息,所以,需要更细粒度的判断,验证订单的所属人。
另外可以通过角色、菜单权限2个粒度进行权限验证:
<shiro:hasPermission name="permission1">
<h2>拥有permission1权限可以看到这里</h2>
</shiro:hasPermission>
<shiro:hasRole name="role">
<h2>拥有role角色可以看到这里</h2>
</shiro:hasRole>
验证位置
为了让用户体验足够好,用户无法操作的菜单项和操作按钮不需要再显示了,需要在前端进行验证,比如添加用户的操作:
<shiro:hasPermission name="user:add">
<a href='user/add'>添加用户</a>
</shiro:hasPermission>
只有前端验证也不行,可以通过模拟HTTP请求绕过前端访问,后端也要进行验证,shiro提供了拦截器进行统一处理。
Shiro基本架构和扩展
Shiro是apache下的开源软件,一个的安全框架,对用户的身份和权限进行管理和验证,看看官网对它的概述:
Apache Shiro™ is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management
本篇不会介绍Shiro的细节,只是通过介绍Shiro的基本组件,对应到权限管理的一般模型。
Shiro的基本架构如下:
- Subject:当前与用户交互的实体,包括用户、第三方服务、corn任务等,使用者只需通过该对象提供的一系列方法,统一与后端的安全管理模块交互, 对应模型中的「用户」;
- Authenticator:负责验证用户身份,用户尝试登陆时,会调用它的方法进行认证,它会根据配置,调用一个或多个Realm进行用户名和密码校验,对应模型中的「用户登陆操作」;
- Authorizer:负责验证用户访问权限,用户访问一个页面时,可以根据它提供的方法验证用户的权限,它也会调用一个或多个Realm获取用户的权限数据,对应模型中的「是否有权限访问」;
- SessionManager:提供一种健壮的方式管理用户会话,这是Shiro的一个独特特性,如果是一个Web/Servlet应用,默认会使用已有的会话管理,如果不是Web应用,Shiro会使用内置的会话管理器。它会调用SessionDAO进行会话持久化,对应模型中的「Session管理」;
- CacheManager:Shiro在Authenticator、Authorizer、SessionManager模块,会访问后端的存储系统,使用缓存管理可以提高数据访问的性能,可以很方便的与第三方缓存框架集成,比如Ehcache,Redis等;
- Realms:是程序和用户数据、权限数据的桥梁,以插件的方式提供扩展,可以配置一个或多个Realm为Authenticator和Authorizer模块提供数据支持;
- Cryptography:提供数据加解密的支持,它封装了相关接口,更易理解和使用;
通过上面的介绍可以看出,Shiro的基本组件与总结的「一般模型」是对应的,它帮助我们实现了整个用户验证、权限验证、会话管理的流程,同时提供缓存管理、加解密封装提高了性能和安全性,通过Realm插件的方式支持扩展,自定义实现类获取用户、权限数据。
以用户身份认证为例,说明几个组件的交互过程:
系列第一部分总结
到此,系列第一部分「单点登录与权限管理本质」就介绍完了,通过5篇文章,把自己想说的本质说完了,基础概念肯定会有遗漏,后续部分学习、总结过程中,会不断补充。
还原技术的本质,把复杂的技术、框架抽象来看,形成一个相对简单、容易理解的视图,能够更好的理解、扩展、应用它。
对于单点登录,通过cookie、http重定向,可自动进行跳转和身份验证,达到登录一次,可访问多个子系统的效果。
对于权限管理,了解其一般的模型和验证流程,加上成熟的实现框架,可以快速、全面、稳定地实现它,并在此基础上进行扩展。
另外,cookie、用户的账号权限信息很重要,要不断积累安全方面的知识,提高其安全性。
接下来的第二部分主要是实践,会仿照我们的系统做一个DEMO,利用CAS、Shiro框架实现单点登录和权限管理。另外,会抽象出一个「用户中心」,管理用户、角色、权限菜单,各个子系统通过同步方式同步自己的权限菜单。
相关推荐
项目是基于SpringBoot2的一整套后端管理平台,提供整套公共微服务服务模块:集中权限管理(单点登录)、内容管理、人事办公。旨在通过实战分享个人经验简洁高效,减少过渡封装,展现技术本质,以技术服务于业务。 ...
近年来,许多组织已经开始选择FIM单点登录来专注于业务,而不是将用户凭据存储在自己的数据库中,这也为组织提供了经济上的优势,也为用户带来了便利。 但是,当前的FIM框架本质上是动态的以进行身份验证和授权...
字符编码的区别与介绍 用户交互程序 if else流程判断 while 循环 while 循环优化版本 for 循环及作业要求 第2周 本节鸡汤 模块初识 pyc是什么 python数据类型 bytes数据类型 列表的使用 元组与购物车程序练习 ...
其次,与那些常见的微机上的操作系统相比较而言,COS在本质上更加接近于临控程序、而不是一个通常所谓的真正意义上的操作系统,这一点至少在目前看来仍是如此。因为在当前阶段,COS所需要解决的主要还是对外部的命令...
4、对收款单、退款单、发货单、退货单进行管理,能查看到每个单据的详细信息,如订单号、支付方式、操作员、生成时间、收款方式、付款金额时间等,方便各分销商在出现问题时寻找问题来源 五、分销商客户管理系统 ...
SSP解决方案帮助用户解决以下的问题: 分散的管理增加管理成本和管理难度 作为一个新兴的、覆盖范围极大技术领域,信息安全可以划分为众多的细分领域,例如防火墙、入侵检测、漏洞扫描、认证和授权、加密、防病毒、...
PKI 管理对象 证书、密钥、证书撤销列表 防火墙的基本技术 包过滤技术,代理服务技术,状态检测技术,自适应代理技术。 防止行为抵赖,属于什么的研究范畴 数字签名 完整的数字签名过程包括哪两个过程 签名过程、...
微信小程序源码 仿KFC下单小程序 (外卖点单小程序源码 ) 微信小程序源码 仿KFC下单小程序 (外卖点单小程序源码 ) 微信小程序源码 仿KFC下单小程序 (外卖点单小程序源码 ) 微信小程序源码 仿KFC下单小程序 ...
新一代的版本控制工具本质上是点对点的。所有的这些系统都抛弃了对单个中央服务器 的依赖,允许用户将他们的版本控制数据发布到任何需要的地方。通过互联网的协作摆脱了 技术的限制,走向选择和审查。现代的工具可以...
SSO(单点登录) Single Sign On 即单点登录说的是用户登陆多个子系统的其中一个就有权访问与其相关的其他系统。 数据脱敏 分布式架构 CAP理论 Consistency(一致性) Availability(可用性) Partition Tolerance...
有索引的时候:创建索引的本质就是创造额外的文件,查询时先去额外的文件找,定好位置,再去原始表直接查询,提高查询速度,但是增删改的速度依然慢,创建索引后必须命中索引才有效 索引的分类 1、普通索引:加速...
1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是...
速度(Velocity):指获得数据的速度,就是通过算法对数据的逻辑处理速度⾮常快,1秒定律,可从各种类型的数据中快速获得⾼价值的 信息,这⼀点也是和传统的数据挖掘技术有着本质的不同。; 价值(Value):指价值...
EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。 21、Static Nested Class 和 Inner Class的不同。 Static Nested Class是被声明为静态(static)的内部类,它可以不依赖...
系统还全面支持订单管理、发退货查询管理、已开发票查询、限时/限量抢购管理、商品属性批量设置管理、商品规格管理、优惠券管理、商品品牌管理、...管理、收货地址管理、物流公司管理、订单详情模板、快递单打印模板管理...
因权限只能到60MB,分卷压缩了,共3个压缩包,需下载完3个一起解压, ============================== ASP.NET 4高级程序设计(第4版)》【原版书为:Pro ASP.NET 4 in C# 2010】是ASP.NET领域的鸿篇巨制,全面讲解了...
传统防火墙概念特指网络层实现 3 防火墙缺陷 使用不便,认为防火墙给人虚假的安全感 对用户不完全透明,可能带来传输延迟、瓶颈及单点失效 不能替代墙内的安全措施 不能防范恶意的知情者 不能防范不通过它的连接 不...
计算的次序容易管理; 比 OR 操作符清单执行更快;最大优点是可以包含其他 SELECT 语句,使用能够动态地建立 WHERE 子句。 如 SELECT prod_id,prod_price,prod_name FROM Products WHERE vend_id IN(‘DELL’,’...