作者:PioneerYi链接:https://juejin.|如何设计一个通用的权限管理系统?说的太详细了!
作者:PioneerYi
链接:https://juejin.im/post/6850037267554287629
一个系统 , 如果没有安全控制 , 是十分危险的 , 一般安全控制包括身份认证和权限管理 。 用户访问时 , 首先需要查看此用户是否是合法用户 , 然后检查此用户可以对那些资源进行何种操作 , 最终做到安全访问 。 身份认证的方式有很多种 , 最简单的就是直接用户名密码 , 还有业内比较通用的方式CAS方式登陆等;授权的框架也很多 , 比如OAuth2 , Shiro等 。 本文首先会讲解一下CAS的概念 , 以及基于角色的权限管理模型(RBAC)的概念 , 接着进行数据表的设计 , 最后讲解如何利用Shiro进行权限管理 。
一、CAS身份认证
集中式认证服务(英语:CentralAuthenticationService , 缩写CAS)是一种针对万维网的单点登录协议 。 它的目的是允许一个用户访问多个应用程序 , 而只需提供一次凭证 。
1.1、名词概念
CAS的核心就是其Ticket , 及其在Ticket之上的一系列处理操作 。 CAS的主要票据有TGT、ST、PGT、PGTIOU、PT , 其中TGT、ST是CAS1.0(基础模式)协议中就有的票据 , PGT、PGTIOU、PT是CAS2.0(代理模式)协议中有的票据 。 这些票据谁生成得了?肯定是有相关服务的 , 主要服务有:KDC , AS , TGS 。 两者媒介肯定也是有的:TGC 。
1.1.1、CAS的Ticket
1)TGT(TicketGrantingTieckt)
TGT是CAS(具体为KDC的AS发放)为用户签发的登录票据 , 拥有了TGT , 用户就可以证明自己在CAS成功登录过 。 TGT封装了Cookie值以及此Cookie值对应的用户信息 。 用户在CAS认证成功后 , CAS生成cookie , 写入浏览器 , 同时生成一个TGT对象 , 放入自己的缓存 , TGT对象的ID就是cookie的值 。 当HTTP再次请求到来时 , 如果传过来的有CAS生成的cookie , 则CAS以此cookie值为key查询缓存中有无TGT , 如果有的话 , 则说明用户之前登录过 , 如果没有 , 则用户需要重新登录 。
简而言之 , 即获取这样一张票据后 , 以后申请各种其他服务票据(ST)便不必再向KDC提交身份认证信息(准确术语是Credentials) 。
2)ST(Serviceticket)
ST是CAS(由KDC的TGS发放)为用户签发的访问某一service的票据 。
用户访问service时 , service发现用户没有ST , 则要求用户去CAS获取ST 。 用户向CAS发出获取ST的请求 , 如果用户的请求中包含cookie , 则CAS会以此cookie值为key查询缓存中有无TGT , 如果存在TGT , 则用此TGT签发一个ST , 返回给用户 。 用户凭借ST去访问service , service拿ST去CAS验证 , 验证通过后 , 允许用户访问资源 。
任何一台Workstation都需要拥有一张有效的ServiceTicket才能访问域内部的应用(Applications) 。 如果能正确接收ServiceTicket , 说明在CASClient-CASServer之间的信任关系已经被正确建立起来 。
3)PGT(ProxyGrantingTicket)
ProxyService的代理凭据 。 用户通过CAS成功登录某一ProxyService后 , CAS生成一个PGT对象 , 缓存在CAS本地 , 同时将PGT的值(一个UUID字符串)回传给ProxyService , 并保存在ProxyService里 。 ProxyService拿到PGT后 , 就可以为TargetService(back-endservice)做代理 , 为其申请PT 。
4)PT(ProxyTicket)
PT是用户访问TargetService(back-endservice)的票据 。 如果用户访问的是一个Web应用 , 则Web应用会要求浏览器提供ST , 浏览器就会用cookie去CAS获取一个ST , 然后就可以访问这个Web应用了 。 如果用户访问的不是一个Web应用 , 而是一个C/S结构的应用 , 因为C/S结构的应用得不到cookie , 所以用户不能自己去CAS获取ST , 而是通过访问proxyservice的接口 , 凭借proxyservice的PGT去获取一个PT , 然后才能访问到此应用 。
TGT、ST、PGT、PT之间关系的总结
- 世界海员日丨链接世界的旅程
- 涨价的乐高,还能火多久?
- 20220624 05:01:00 作者:老王在亚马逊的:会议上|亲情or恐怖:Alexa可以模仿故去亲人声音
- Java|腾讯没闲着
- iPhone|618黑科技轻薄本推荐,职场人、创作者必看
- 36氪|36氪独家 | 「凌迪科技Style3D」获得近1亿美元PreB+融资,想以柔性仿真引擎链接元宇宙
- 亚马逊|诊断上百个链接后,发现亚马逊中小卖家7大普遍问题
- 小红书处置多家 MCN 和部分作者,打击买卖账号及刷量作弊行为
- |生产力工具只认准MBP?华硕ProArt 创16靠这几招为创作者强势赋能
- 数字金融发展要与数字金融立法同步
