SpringCloud微服务权限控制(一)概述
从单体应用到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对象的内容,服务器在生成对象的时候会加上签名加密。
分布式session和JWT对比
分布式session的问题是,服务器保存用户认证数据,需要扩展的成本,如果认证服务或者缓存服务出现问题,整个应用就不可用,也就是单点故障问题。session的访问一般要存储在内存中,来支持快速的读写,这样也就不易于扩展。
JWT的缺点是,session只要是服务器发出去的JSON对象,服务器都要通过认证。如果用户信息量比较大的话,每次通过网络请求也不太合理
服务权限认证
微服务的一大核心是将服务进行拆分,降低服务的复杂度,拆分后,就会有服务之间的调用关系,服务之间的权限控制也是必要的。一般只需要维系微服务之间的调用关系,微服务调用时,调用发带着自己的服务标识,被调用发校验调用方的权限。
用户权限认证
用户权限一般分为功能权限和数据权限
功能权限
用户功能权限一般采用经典的RBAC(Role Based Access Control)方式进行控制,RBAC的核心就是通过角色来控制用户权限,也就是用户通过角色和权限产生关联,再去控制用户的操作。
RBAC的模型如下,通过这个模型最终用户和权限产生关系,结合前后端的权限校验,实现功能权限控制。
数据权限
用户的数据权限需要新建模型去控制,通过数据范围的模型去控制,核心是通过数据范围来控制数据权限,先定义好在哪些维度上进行数据权限的控制,数据范围有各个维度数据的数据集,根据这个数据集去控制用户的数据的访问范围。
这样,整合用户认证,微服务之间权限控制,用户权限控制后,微服务的权限控制整体结构为:
(完)
SpringCloud微服务权限控制(一)概述相关推荐
- 微服务权限控制(二)共享Session方式的登录认证
接上一篇的权限控制,再讨论再网关zuul的登录认证实现. 网关使用SpringCloud的zuul,登录认证选择使用自定义共享session的方式,来实现集群的登录验证.保护接口的私密,保证系统安全. ...
- SpringCloud微服务权限管理系统
项目介绍 一款 Java 语言基于 SpringCloud.Vue.ElementUI.MySQL等框架精心打造的一款前后端分离框架,致力于实现模块化.组件化.可插拔的前后端分离架构敏捷开发框架,可用 ...
- springcloud 微服务鉴权_springcloud 微服务权限校验JWT模式获取 token 实战(十二)...
springcloud 微服务权限校验JWT模式获取 token 实战(十二) springcloud 微服务权限校验JWT模式获取 token 实战(十二) JWT:json web token 是 ...
- SpringCloud微服务架构实战:商家权限体系设计及开发
商家管理后台与sso设计 在本文的电商平台实例中,商家是这个平台的主角,商家管理后台是专门为这个主角提供的一个安全可靠的操作平台.在商家管理后台中,商家可以进行商品管理.订单管理.物流管理.会员管理. ...
- SpringCloud微服务技术实践与总结(基础篇)
1.认识微服务 1.1.单体架构 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署. 单体架构的优缺点如下: 优点: 架构简单.部署成本低 缺点: 耦合度高(维护困难.升级困难) 1.2 ...
- 学习笔记:SpringCloud 微服务技术栈_实用篇①_基础知识
若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...
- SpringCloud 微服务架构,适合接私活(附源码)
欢迎关注方志朋的博客,回复"666"获面试宝典 今天给大家推荐一个牛逼的接私活项目,SpringCloud微服务架构项目! 一个由商业级项目升级优化而来的微服务架构,采用Sprin ...
- Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲
Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台: 微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...
- SpringCloud 微服务
一微服务架构概述 1.1 微服务特性以及优点 每个服务可以独立运行在自己的进程里 一系列独立运行的微服务(goods,order,pay,user,search-)共同构建了整个系统 每个服务为独立的 ...
最新文章
- http://www.cnblogs.com/youfan/articles/3216816.html
- 加速产业生态算力升级,华为鲲鹏展翅福州
- centos 7 文档服务器,centos 7 web服务器
- 《Linux From Scratch》第三部分:构建LFS系统 第八章:让LFS系统可引导 - 8.2. 创建 /etc/fstab 文件...
- 题目1024:畅通工程
- java 四则运算 栈的实现
- 一位经验丰富的程序员如何建立网络初创企业?
- VSFTP服务--Linux学习笔记
- Centos下mysql数据库备份与恢复的方法
- 人工智能让边缘计算更有价值!
- 基于ISIS路由协议的路由聚合
- c语言算兔子野鸡,“上山兔子下山鸡,离水甲鱼不要追”,有什么科学依据?...
- android伪装mac地址,安卓手机如何伪装ip或者mac地址
- SXT分布式缓存技术公开课的观后感
- 构建高并发高可用的电商平台架构实践(一)
- Excel中文本替换函数
- DSP总结之C语言环境
- oschina 公司已成立
- 深入理解Java集合框架
- 大数据城市规划餐饮选址
热门文章
- TOJ3651确定比赛名次
- .Net 平台下的版本控制 --- Subversion(SVN)1.6.x
- 考研计算机网络,2020计算机专业考研的计算机网络部分知识点
- 5 好看的字体样式_嫌电脑字体样式太少,这款小软件几百种的样式随便你选择...
- 图片上传工具 java_图片上传工具类-fileUtil
- java char占用多少字节_Java虚拟机:Java对象大小、对象内存布局及锁状态变化
- java实体类中有枚举类型_实体类的枚举属性--原来支持枚举类型这么简单,没有EF5.0也可以...
- 本地虚拟机上的docker安装mysql_linux下利用Docker安装mysql的步骤
- 一稿过的Banner模板素材!做电商的你一定需要
- 配色神器,轻松解决你所有的配色难题!