前面几篇文章介绍了单点登录的本质,包括cookie、session、重定向的基本概念,单点登录的基本交互流程,cookie的重要性和安全问题。单点登录能够确保:必须通过身份验证后,才能访问网站,且访问多个系统时,只需要登录一次。
创新互联是专业的寻甸网站建设公司,寻甸接单;提供成都网站建设、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行寻甸网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!一般系统都会有多个角色,不同角色可访问的系统功能不同,通过给用户分配不同角色,决定用户可访问的系统功能。
继续介绍「单点登录与权限管理」系列的第一部分:单点登录与权限管理本质,本篇说说权限管理,主要从以下几个方面介绍:
权限验证的过程比较简单,描述如下:
如何管理和分配用户权限呢,一般会抽象出如下实体概念:
另外,为了方便权限管理,会单独抽取一个服务「用户中心」,统一管理用户、角色和各个系统的权限菜单。权限菜单由各个子系统同步到「用户中心」或者提供批量导入的功能,权限菜单标识的规则要提前约定好,一致的菜单标识有助于权限拦截的判断。
简单截取几个我们项目中的页面,加深下理解:
添加用户时,需要选择角色
添加角色时,需要选择权限菜单
用户拥有了访问和操作某些数据的权限,但不代表可以访问所有的数据,可能只能访问和操作自己的数据,可能只能访问和操作组内的数据,这是更细粒度的权限控制。
权限验证的位置可能在前端、可能在后端。前端根据当前用户的权限,显示不同的菜单项、操作按钮,后端根据当前用户的权限,验证操作的合法性,返回可访问的数据集合,权限验证位置也要考虑全面。
比如有这样一个场景:有一个查询订单接口供外部调用,可根据订单编号返回订单详情。
如果订单编号有规则可寻,且后端不对订单所属人进行判断,就可以查看其他人订单的信息,所以,需要更细粒度的判断,验证订单的所属人。
另外可以通过角色、菜单权限2个粒度进行权限验证:
拥有permission1权限可以看到这里
拥有role角色可以看到这里
为了让用户体验足够好,用户无法操作的菜单项和操作按钮不需要再显示了,需要在前端进行验证,比如添加用户的操作:
添加用户
只有前端验证也不行,可以通过模拟HTTP请求绕过前端访问,后端也要进行验证,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的基本架构如下:
通过上面的介绍可以看出,Shiro的基本组件与总结的「一般模型」是对应的,它帮助我们实现了整个用户验证、权限验证、会话管理的流程,同时提供缓存管理、加解密封装提高了性能和安全性,通过Realm插件的方式支持扩展,自定义实现类获取用户、权限数据。
以用户身份认证为例,说明几个组件的交互过程:
到此,系列第一部分「单点登录与权限管理本质」就介绍完了,通过5篇文章,把自己想说的本质说完了,基础概念肯定会有遗漏,后续部分学习、总结过程中,会不断补充。
还原技术的本质,把复杂的技术、框架抽象来看,形成一个相对简单、容易理解的视图,能够更好的理解、扩展、应用它。
对于单点登录,通过cookie、http重定向,可自动进行跳转和身份验证,达到登录一次,可访问多个子系统的效果。
对于权限管理,了解其一般的模型和验证流程,加上成熟的实现框架,可以快速、全面、稳定地实现它,并在此基础上进行扩展。
另外,cookie、用户的账号权限信息很重要,要不断积累安全方面的知识,提高其安全性。
接下来的第二部分主要是实践,会仿照我们的系统做一个DEMO,利用CAS、Shiro框架实现单点登录和权限管理。另外,会抽象出一个「用户中心」,管理用户、角色、权限菜单,各个子系统通过同步方式同步自己的权限菜单。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。