概述

本文讨论分布式架构权限管理的两种情况,一种是针对统一授权访问的,一种是跨平台接口访问的。

虽然分布式架构会做业务的切割,将整体的业务切割为独立的子业务或者子平台,但是同一平台下往往会有统一的授权和单点登录,客户端而言平台是整体的,这种是统一授权访问的权限管理。但是也会遇到多平台协作的情况,这种情况不用考虑其他平台的架构,只需要为其提供数据接口跟其对接就可以,这种情况就要考虑跨平台接口访问的权限管理。

一、统一授权访问

前端采用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分布式架构权限管理的更多相关文章

  1. 基于SpringCloud分布式架构

    基于SpringCloud分布式架构 为什么要使用分布式架构 Spring Cloud 专注于提供良好的开箱即用经验的典型用例和可扩展性机制覆盖 分布式/版本化配置 服务注册和发现 路由 Servic ...

  2. 第二十三章 多项目集中权限管理及分布式会话——《跟我学Shiro》

    二十三章 多项目集中权限管理及分布式会话——<跟我学Shiro> 博客分类: 跟我学Shiro 跟我学Shiro  目录贴:跟我学Shiro目录贴 在做一些企业内部项目时或一些互联网后台时 ...

  3. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...

  4. 架构设计之Spring-Session分布式集群会话管理

    前言 通常在web开发中,回话管理是很重要的一部分,用于存储与用户相关的一些数据.对于JAVA开发者来说,项目中的session一般由Tomcat或者jetty容器来管理. 特点介绍 尽管使用特定的容 ...

  5. shiro权限控制(二):分布式架构中shiro的实现

    前言:前段时间在搭建公司游戏框架安全验证的时候,就想到之前web最火的shiro框架,虽然后面实践发现在netty中不太适用,最后自己模仿shiro写了一个缩减版的,但是中间花费两天时间弄出来的shi ...

  6. 基于puppet分布式集群管理公有云多租户的架构浅谈

    基于puppet分布式集群管理公有云多租户的架构浅谈 一.架构介绍   在此架构中,每个租户的业务集群部署一台puppet-master作为自己所在业务集群的puppet的主服务器,在每个业务集群所拥 ...

  7. 架构设计之Spring-Session的分布式集群会话管理

    发表于 2017-04-24  |  160次围观   |   分类于 架构设计   |   暂无评论 前言 通常在web开发中,回话管理是很重要的一部分,用于存储与用户相关的一些数据.对于JAVA开 ...

  8. Kubernetes——基于容器技术的分布式架构领先方案,它的目标是管理跨多个主机的容器,提供基本的部署,维护以及运用伸缩

    1.Kubernetes介绍 1.1 简介 Kubernetes是什么?首先,它是一个全新的基于容器技术的分布式架构领先方案.其次,它是一个开放的开发平台.最后,它是一个完备的分布式系统支撑平台.Ku ...

  9. 小D课堂 - 新版本微服务springcloud+Docker教程_2_01传统架构演进到分布式架构

    笔记 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构     简介:讲解单机应用和分布式应用架构演进基础知识 (画图) 高可用 LVS+keepalive :负载均衡的知识点 1. ...

随机推荐

  1. Designing Data-Intensive Applications笔记

    <Designing Data-Intensive Applications>书看完很久了,前段时间陈皓来公司技术分享也推荐了这本书.读起来酣畅淋漓,写篇系统总结的意愿强烈,无耐内容属实太 ...

  2. Linux下virtualenv与virtualenvwrapper详解

    在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用 ...

  3. sql server 如何在全库中查找数据在哪个表

    1.查找字段在库中哪个表 如果要查找FName select   a.name,b.name   from   syscolumns a   inner   join   sysobjects   b ...

  4. 国内加速访问 GitHub

    国内加速访问 GitHub 本文原始地址:https://sitoi.cn/posts/23395.html 中国访问 GitHub 的速度不忍直视,那就叫一个慢! Q: 为什么访问速度会很慢? A: ...

  5. centos安装安全狗5步就能完成

    安全狗是为服务器开发的一款服务器管理软件,客户的服务器是centos 64位,我们就来看看如何安装吧.首先必须得有root账号权限,不然下面的步骤可能都无法执行.随ytkah一起来操作吧 1.下载安全 ...

  6. phpcms邮箱smtp配置163企业邮测试可用

    前面我们给phpcms加了https,但是修改邮箱smtp配置一直提交不了,提示请填写接口地址,格式为:http://www.abc.com,结尾不包含"/",找了一下phpsso ...

  7. USACO Superprime Rib

    洛谷 P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 洛谷传送门 JDOJ 1673: Superprime Rib JDOJ传送门 题目描述 农民约翰的母牛总是产生最好 ...

  8. ESP8266MOD、刷可以使用AT指令的固件、作为客户端向贝壳云端发送固定数据

    硬件部分 1. ESP8266MOD 2. Micro USB数据线一根 实物图:(小灯不必) 硬件准备好之后,直接用数据线连接到电脑即可,然后找到所对应的COM口,记下来备用! 为ESP8266刷A ...

  9. 写入Txt文本信息

    public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { L ...

  10. css3中的box-sizing常用的属性有哪些?分别有什么作用?

    content-box:默认标准盒模型,总宽=width+padding+border+margin border-box:IE标准,怪异盒模型,总宽=width+margin inherit:从父元 ...