博客
关于我
我们公司用了6年的通用的权限管理系统设计方案
阅读量:316 次
发布时间:2019-03-03

本文共 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/

    你可能感兴趣的文章
    Python读取文件数据进行数据图形化展示
    查看>>
    python | Python反向迭代:reversed实现机制
    查看>>
    python | Python开发必知的数据容器用法(建议收藏!)
    查看>>
    python读取文件夹下文件名称_如何在Python目录中获取文件名列表
    查看>>
    python | Python文本处理中的相似性识别应用
    查看>>
    python | Python模块缓存:sys.modules机制
    查看>>
    python | Python集成学习和随机森林算法
    查看>>
    python | Python高阶函数与函数式编程
    查看>>
    python | pytime,一个实用的 时间和日期处理 Python 库!
    查看>>
    python | pyupgrade,一个有趣的 Python 库!
    查看>>
    python | pyvips,一个神奇的 图像处理 Python 库
    查看>>
    Python | qutip,一个高级的 Python 库!
    查看>>
    python | rapidjson,一个实用的 提高JSON处理效率 Python 库!
    查看>>
    python | reflex,一个无敌的 Python 库!
    查看>>
    python | reloading,一个强大的 Python 库!
    查看>>
    python | rich,一个无敌的 Python 库!
    查看>>
    python | rlax,一个超强的 强化学习领域 Python 库!
    查看>>
    python | rpyc,一个超实用的 Python 库!
    查看>>
    python | rq,一个无敌的 关于Redis 的Python 库!
    查看>>
    python读取字符串指定位置字符_python要怎么截取指定位置的字符串呢?
    查看>>