从单体应用到SOA应用再到Spring Cloud微服务构架,应用的安全访问都是非常重要的问题,怎么样设计微服务的权限控制?首先,权限控制可以分为三个部分:用户认证,服务权限,用户权限。

用户认证

用户认证,简单的讲,可以简化为应用对用户登录状态的认证。传统的单体应用,使用session来进行用户认证,但是这种方式已经不适合微服务的场景了;微服务的结构下,可以通过分布式session来解决,也可以通过和Spring Cloud Security结合很好的OAuth2来解决。

分布式Session

通过单独开辟一个认证服务或者公共存储的方式实现。一般流程为:

1,用户登录,验证成功

2,服务器给用户客户端分发令牌token,并将token以及其他信息存储到认证服务或者公共缓存中

3,客户端请求时带服务器分发的token,请求服务

4,服务拿到用户token,并通过认证服务或者公共缓存中存储的token来校验用户token

5,token校验成功,执行服务逻辑,返回结果

用分布式session实现时,需要仔细考量的是,校验token的逻辑在什么阶段校验比较合适?一般有两个选择,放在各自的微服务校验,和放在zuul网关校验。

在微服务上校验用户token的话,还要考虑到要与服务调用服务的场景区分,增加了校验的复杂程度,所以选择将用户认证统一放在zuul网关校验。这样,业务流程就如下图。

JWT

JWT(JSON Web Tokens),简单的说就是服务器不存储任何数据,将数据保存在客户端,每次请求发回服务端。

JWT的原理是,服务器认证后生成一个json对象(保存着用户信息,登录过期时间等),json对象发回给用户客户端,以后客户端与服务器进行通信的时候,都需要带着json对象,这样服务器就可以完成用户的认证。

这样,服务器不保存任何数据,这样服务器就无状态了,比较易于扩展。

但是数据保存在客户端,用户修改JSON对象的数据很不安全,为了保证用户不篡改json对象的内容,服务器在生成对象的时候会加上签名加密。

分布式sessionJWT对比

分布式session的问题是,服务器保存用户认证数据,需要扩展的成本,如果认证服务或者缓存服务出现问题,整个应用就不可用,也就是单点故障问题。session的访问一般要存储在内存中,来支持快速的读写,这样也就不易于扩展。

JWT的缺点是,session只要是服务器发出去的JSON对象,服务器都要通过认证。如果用户信息量比较大的话,每次通过网络请求也不太合理

服务权限认证

微服务的一大核心是将服务进行拆分,降低服务的复杂度,拆分后,就会有服务之间的调用关系,服务之间的权限控制也是必要的。一般只需要维系微服务之间的调用关系,微服务调用时,调用发带着自己的服务标识,被调用发校验调用方的权限。

用户权限认证

用户权限一般分为功能权限和数据权限

功能权限

用户功能权限一般采用经典的RBAC(Role Based Access Control)方式进行控制,RBAC的核心就是通过角色来控制用户权限,也就是用户通过角色和权限产生关联,再去控制用户的操作。

RBAC的模型如下,通过这个模型最终用户和权限产生关系,结合前后端的权限校验,实现功能权限控制。

数据权限

用户的数据权限需要新建模型去控制,通过数据范围的模型去控制,核心是通过数据范围来控制数据权限,先定义好在哪些维度上进行数据权限的控制,数据范围有各个维度数据的数据集,根据这个数据集去控制用户的数据的访问范围。

这样,整合用户认证,微服务之间权限控制,用户权限控制后,微服务的权限控制整体结构为:

(完)

SpringCloud微服务权限控制(一)概述相关推荐

  1. 微服务权限控制(二)共享Session方式的登录认证

    接上一篇的权限控制,再讨论再网关zuul的登录认证实现. 网关使用SpringCloud的zuul,登录认证选择使用自定义共享session的方式,来实现集群的登录验证.保护接口的私密,保证系统安全. ...

  2. SpringCloud微服务权限管理系统

    项目介绍 一款 Java 语言基于 SpringCloud.Vue.ElementUI.MySQL等框架精心打造的一款前后端分离框架,致力于实现模块化.组件化.可插拔的前后端分离架构敏捷开发框架,可用 ...

  3. springcloud 微服务鉴权_springcloud 微服务权限校验JWT模式获取 token 实战(十二)...

    springcloud 微服务权限校验JWT模式获取 token 实战(十二) springcloud 微服务权限校验JWT模式获取 token 实战(十二) JWT:json web token 是 ...

  4. SpringCloud微服务架构实战:商家权限体系设计及开发

    商家管理后台与sso设计 在本文的电商平台实例中,商家是这个平台的主角,商家管理后台是专门为这个主角提供的一个安全可靠的操作平台.在商家管理后台中,商家可以进行商品管理.订单管理.物流管理.会员管理. ...

  5. SpringCloud微服务技术实践与总结(基础篇)

    1.认识微服务 1.1.单体架构 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署. 单体架构的优缺点如下: 优点: 架构简单.部署成本低 缺点: 耦合度高(维护困难.升级困难) 1.2 ...

  6. 学习笔记:SpringCloud 微服务技术栈_实用篇①_基础知识

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...

  7. SpringCloud 微服务架构,适合接私活(附源码)

    欢迎关注方志朋的博客,回复"666"获面试宝典 今天给大家推荐一个牛逼的接私活项目,SpringCloud微服务架构项目! 一个由商业级项目升级优化而来的微服务架构,采用Sprin ...

  8. Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲

    Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台:   微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...

  9. SpringCloud 微服务

    一微服务架构概述 1.1 微服务特性以及优点 每个服务可以独立运行在自己的进程里 一系列独立运行的微服务(goods,order,pay,user,search-)共同构建了整个系统 每个服务为独立的 ...

最新文章

  1. http://www.cnblogs.com/youfan/articles/3216816.html
  2. 加速产业生态算力升级,华为鲲鹏展翅福州
  3. centos 7 文档服务器,centos 7 web服务器
  4. 《Linux From Scratch》第三部分:构建LFS系统 第八章:让LFS系统可引导 - 8.2. 创建 /etc/fstab 文件...
  5. 题目1024:畅通工程
  6. java 四则运算 栈的实现
  7. 一位经验丰富的程序员如何建立网络初创企业?
  8. VSFTP服务--Linux学习笔记
  9. Centos下mysql数据库备份与恢复的方法
  10. 人工智能让边缘计算更有价值!
  11. 基于ISIS路由协议的路由聚合
  12. c语言算兔子野鸡,“上山兔子下山鸡,离水甲鱼不要追”,有什么科学依据?...
  13. android伪装mac地址,安卓手机如何伪装ip或者mac地址
  14. SXT分布式缓存技术公开课的观后感
  15. 构建高并发高可用的电商平台架构实践(一)
  16. Excel中文本替换函数
  17. DSP总结之C语言环境
  18. oschina 公司已成立
  19. 深入理解Java集合框架
  20. 大数据城市规划餐饮选址

热门文章

  1. TOJ3651确定比赛名次
  2. .Net 平台下的版本控制 --- Subversion(SVN)1.6.x
  3. 考研计算机网络,2020计算机专业考研的计算机网络部分知识点
  4. 5 好看的字体样式_嫌电脑字体样式太少,这款小软件几百种的样式随便你选择...
  5. 图片上传工具 java_图片上传工具类-fileUtil
  6. java char占用多少字节_Java虚拟机:Java对象大小、对象内存布局及锁状态变化
  7. java实体类中有枚举类型_实体类的枚举属性--原来支持枚举类型这么简单,没有EF5.0也可以...
  8. 本地虚拟机上的docker安装mysql_linux下利用Docker安装mysql的步骤
  9. 一稿过的Banner模板素材!做电商的你一定需要
  10. 配色神器,轻松解决你所有的配色难题!