本文共 1835 字,大约阅读时间需要 6 分钟。
一个系统如果没有安全控制,是十分危险的,一般安全控制包括身份认证和权限管理。用户访问时,首先需要验证此用户是否为合法用户,然后检查此用户可对哪些资源进行何种操作,最终实现安全访问。身份认证的方式有多种,最简单的为用户名密码认证,还有常用的CAS方式登录等。下文将介绍CAS身份认证的基本原理以及基于角色的权限管理模型(RBAC),并进行数据表设计,最后结合Shiro框架进行权限管理。
CAS身份认证
CAS(Central Authentication Service)是一种用于万维网的单点登录协议,旨在允许用户通过一次认证访问多个服务。其核心是Ticket的概念,包括TGT、ST、PGT等多种票据。
Ticket类型
TGT(Ticket Granting Ticket)
CAS系统(KDC的AS服务)为用户签发的登录票据,用户获取TGT后,浏览器保存其Cookie值。TGT包含用户信息,用于后续认证。当访问其他服务时,若传入TGT的Cookie值,CAS验证其有效性,如果无效则要求重新登录。 ST(Service Ticket)
CAS为用户签发的访问特定服务的票据。用户凭借ST访问目标服务时,服务验证ST的有效性,允许用户访问资源。ST的颁发依赖于TGT。 PGT(Proxy Granting Ticket)
Proxy服务通过CAS获取PGT后,可为Target Service申请PT票据。 PT(Proxy Ticket)
PT是用户访问非Web应用服务的票据,需通过Proxy Service获取。 CAS服务
CAS主要服务包括:
- KDC(Key Distribution Center):负责签发TGT。
- AS(Authentication Service):验证用户凭证,签发TGT。
- TGS(Ticket Granting Service):根据TGT签发ST。
CAS工作原理
CAS单点登录过程:
用户第一次访问服务,若未提供有效ST,则转向CAS认证页面。 用户通过安全认证后,CAS生成TGT并设置Cookie,返回用户。 用户保存TGT后,若再次访问其他服务,可直接使用TGT获取所需ST。 TGT在有效期内有效,用户离开系统后即视为过期。 基于角色的权限管理模型(RBAC)
RBAC是业界广泛采用的权限管理模型,其核心是将权限分配到角色,用户通过角色获得权限。RBAC模型可以分为以下几种类型:
用户角色模型:用户可属于多个角色,每个角色可拥多个权限。 用户组模型:通过用户组简化用户管理,可将权限与组相关联。 角色继承模型:上级角色继承下级角色权限,可形成组织架构树状关系。 角色限制模型:某些角色不可同时赋予(如运动员和裁判员),或有数量限制(如仅允许一个管理员)。 数据表设计
根据RBAC模型,数据库设计如下:
t_product_info(产品信息):记录产品基本信息及创建人。 t_product_member(产品成员):记录产品成员关系。 t_user_info(用户信息):记录用户基本信息及创建时间。 t_user_role(用户角色):记录用户角色关系。 t_role(角色信息):记录角色名称、描述及对应对象。 t_role_base(基础角色):记录基础角色权限。 t_role_permission(角色权限):记录角色与权限关系。 t_user_group(用户组):记录用户组信息。 t_user_group_role(用户组角色):记录用户组与角色关系。 t_user_permission(用户权限):记录用户的具体权限。 角色及权限点设计
角色设计:采用通用角色+实例角色模式。通用角色如ADMIN、MANAGER等,实例角色如“资源+通用角色+资源ID”。 资源与操作:系统资源如产品,主要操作为CREATE、DELETE、EDIT、VIEW。细化控制根据业务需求。 权限策略:采用五元组(资源:操作:实例:BU:密级)进行权限控制。 身份认证与权限管理实施
Java可采用Shiro框架,实现身份认证与权限校验:
身份认证:自定义AuthenticatingRealm,支持用户名密码或CAS认证。 权限校验:通过AuthorizingRealm获取用户权限信息,检查权限是否符合要求。 参考资料
- Apache Shiro官方文档
- GitHub Shiro仓库
- 博客及技术文章
转载地址:http://ilkq.baihongyu.com/