SpringCloud分布式架构权限管理
概述
本文讨论分布式架构权限管理的两种情况,一种是针对统一授权访问的,一种是跨平台接口访问的。
虽然分布式架构会做业务的切割,将整体的业务切割为独立的子业务或者子平台,但是同一平台下往往会有统一的授权和单点登录,客户端而言平台是整体的,这种是统一授权访问的权限管理。但是也会遇到多平台协作的情况,这种情况不用考虑其他平台的架构,只需要为其提供数据接口跟其对接就可以,这种情况就要考虑跨平台接口访问的权限管理。
一、统一授权访问
前端采用web服务器,nginx或者haproxy之类的都可以,利用nginx做第一层反向代理,用zuul做第二层反向代理,两层反向代理对于常见的网络渗透和爬虫基本可以轻松应对。在这个前提下,我们处理接口授权和访问安全等问题,而且需要从客户端和服务端都进行安全控制。
1、用户通过用户名、密码发起登陆请求,这里可以配合验证码、短信验证、微信验证等提高安全级别,登陆请求访问到权限中心的ZUUL。
2、由ZUUL反向代理到权限中心的SERVICE。
3、查询用户、角色信息,进行查询匹配。
4、有查询结果以后反馈,反馈用户状态,用户、角色、权限信息等。
5、生产TOKEN,TOKEN的算法需要自己编写,建议加入时间戳等信息进行加密。存放在SESSION或者直接放入REDIS中,一般建议放入SESSION中,因为分布式架构要做SESSION共享,必须有一个SESSION共享池,SESSION共享池一般会用REDIS来做,而SESSION可以利用SESSIONID,确认唯一用户,比较方便。
6、返回给客户端用户、角色、权限信息。
7、浏览器客户端通过得到的用户、角色、权限信息进行前端功能和菜单的渲染,隐藏非授权的功能,并且可以基于这些信息做前端的校验,但是这种校验由于都在客户端,很容易被人篡改,只能做一些基本防护,但是这是必要的。
8、浏览器客户端发送业务请求到服务端,请求会附带客户端菜单或者功能的权限信息,服务端通过ZUUL的拦截器拦截业务请求,访问SESSION共享池。
9、然后通过SESSIONID得到TOKEN信息,通过我们的TOKEN算法进行解密,得到用户、角色、权限信息。
10、进行匹配校验,查看本次请求是否有接口访问权限,校验通过就可以访问接口,校验不通过就不能访问。
二、跨平台接口访问
这里的接口是指一下跨平台的接口服务,类似webservice这样,没有单点登录,没有统一的授权,往往是其他平台跟我们平台进行远程交互的,这些往往两个平台不是统一的公司或部门,所以接口不是长期使用的,有一定的时间限制。
1、用户管理员配置外部客户端用户及其权限信息。
2、添加用户信息、权限信息到用户数据库之中。
3、外部客户端接口如果没有TOKEN,需要先发送授权请求到权限中心。
4、权限中心通过验证是否配置外部客户端用户,并且取得该用户的权限信息,校验通过以后通过加密算法生产TOKEN,这里的TOKEN根据实际情况,如果安全要求高最好加入时间戳,让TOKEN过期作废,让对方重新请求。
5、将TOKEN存入REDIS中,形成TOKEN共享池,这里由于没有浏览器的SESSIONID,所以存放在SESSION中意义不大。
6、返回TOKEN给客户端。
7、客户端拿到TOKEN以后发送业务请求给业务接口地址。
8、业务接口通过ZUUL拦截请求,并且将TOKEN跟REDIS的TOKEN进行比对。
9、比对成功以后,对TOKEN进行解密,然后看是否有接口授权。
10、如果有接口授权则通过,访问接口,如果没有则不能访问。
作者github地址:https://github.com/cyc3552637
原文地址:https://blog.csdn.net/cyc3552637/article/details/82842300
SpringCloud分布式架构权限管理的更多相关文章
- 基于SpringCloud分布式架构
基于SpringCloud分布式架构 为什么要使用分布式架构 Spring Cloud 专注于提供良好的开箱即用经验的典型用例和可扩展性机制覆盖 分布式/版本化配置 服务注册和发现 路由 Servic ...
- 第二十三章 多项目集中权限管理及分布式会话——《跟我学Shiro》
二十三章 多项目集中权限管理及分布式会话——<跟我学Shiro> 博客分类: 跟我学Shiro 跟我学Shiro 目录贴:跟我学Shiro目录贴 在做一些企业内部项目时或一些互联网后台时 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
- 架构设计之Spring-Session分布式集群会话管理
前言 通常在web开发中,回话管理是很重要的一部分,用于存储与用户相关的一些数据.对于JAVA开发者来说,项目中的session一般由Tomcat或者jetty容器来管理. 特点介绍 尽管使用特定的容 ...
- shiro权限控制(二):分布式架构中shiro的实现
前言:前段时间在搭建公司游戏框架安全验证的时候,就想到之前web最火的shiro框架,虽然后面实践发现在netty中不太适用,最后自己模仿shiro写了一个缩减版的,但是中间花费两天时间弄出来的shi ...
- 基于puppet分布式集群管理公有云多租户的架构浅谈
基于puppet分布式集群管理公有云多租户的架构浅谈 一.架构介绍 在此架构中,每个租户的业务集群部署一台puppet-master作为自己所在业务集群的puppet的主服务器,在每个业务集群所拥 ...
- 架构设计之Spring-Session的分布式集群会话管理
发表于 2017-04-24 | 160次围观 | 分类于 架构设计 | 暂无评论 前言 通常在web开发中,回话管理是很重要的一部分,用于存储与用户相关的一些数据.对于JAVA开 ...
- Kubernetes——基于容器技术的分布式架构领先方案,它的目标是管理跨多个主机的容器,提供基本的部署,维护以及运用伸缩
1.Kubernetes介绍 1.1 简介 Kubernetes是什么?首先,它是一个全新的基于容器技术的分布式架构领先方案.其次,它是一个开放的开发平台.最后,它是一个完备的分布式系统支撑平台.Ku ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_2_01传统架构演进到分布式架构
笔记 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构 简介:讲解单机应用和分布式应用架构演进基础知识 (画图) 高可用 LVS+keepalive :负载均衡的知识点 1. ...
随机推荐
- Alipay支付宝调用错误:Call to undefined function openssl_sign()
打开php.ini,找到这一行 ;extension=php_openssl.dll,将前面的“;”去掉: 重启服务器.
- pycharm Launching unittests with arguments
在运行程序时出现 但是代码没有错 源代码是: 这是运行时启动了测试 解决方法: File-> Settings -> Tools -> Python Integrated Tools ...
- 谷歌学术出现We're sorry解决办法
出现这个的原因应该是同ip段的或者就是这个ip曾经是个google的黑名单ip,因为恶意爬取谷歌学术了.解决办法就是申请Hurricane Electric Free IPv6 Tunnel Brok ...
- Python面试题(3)
整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...
- 201871010135-张玉晶《面向对象程序设计(Java)》第四周学习总结
201871010135-张玉晶<面向对象程序设计(Java)>第四周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...
- 20180610模拟赛T4——木棍
有\(N\)根木棍,每根的长度\(L\)和重量\(W\)已知.这些木棍将被一台机器一根一根地加工.机器需要一些启动时间来做准备工作,启动时间与木棍被加工的具体情况有关.启动时间遵循以下规则: 加工第一 ...
- JanusGraph入门,schema及数据模型
5.Schema和数据建模 每个JanusGraph都有一个schema,该schema由edge labels,property keys,和vertex组成.JanusGraph schema可以 ...
- 【贪心】【P4053】[JSOI2007] 建筑抢修
[贪心][P4053][JSOI2007] 建筑抢修 Description 有 \(n\) 个工作,第 \(i\) 个工作做完需要 \(a_i\) 的时间,并且必须在 \(b_i\) 时刻前完成.求 ...
- Vue实践TS中的一些常见错误解决方案
mixin报错 import { Component, Prop, Vue ,Mixins} from 'vue-property-decorator' import httpminix from ' ...
- 第10组 Beta冲刺(3/4)
队名:凹凸曼 组长博客 作业博客 组员实践情况 童景霖 过去两天完成了哪些任务 文字/口头描述 继续学习Android studio和Java 制作剩余界面前端 展示GitHub当日代码/文档签入记录 ...