概述

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

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

一、统一授权访问

前端采用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. Linux的权限管理操作-Linux从入门到精通第八天(非原创)

    文章大纲 一.网络相关概述二.网络相关命令三.项目上线流程(必须掌握)四.学习资料下载五.参考文章   一.网络相关概述 1. 网络发展 1.1 信息传递远古时期,人们就通过简单的语言.壁画等方式交 ...

  2. 使用Python3导出MySQL查询数据

    整理个Python3导出MySQL查询数据d的脚本. Python依赖包: pymysql xlwt Python脚本: #!/usr/bin/env python # -*- coding: utf ...

  3. Traefik HTTPS 配置

    参考 add-a-tls-certificate-to-the-ingress Entry Points Definition 使用traefik作为ingress controller透出集群中的h ...

  4. webUploader大文件断点续传学习心得 多文件

    二.Jsp代码: <!-- 断点续传   start--> <!-- 隐藏域 实时保存上传进度 --> <input id="jindutiao" t ...

  5. isaster(Comet OJ - Contest #11D题+kruskal重构树+线段树+倍增)

    目录 题目链接 思路 代码 题目链接 传送门 思路 \(kruskal\)重构树\(+\)线段树\(+\)倍增 代码 #include <set> #include <map> ...

  6. Java 构造方法、final

    构造方法:构造(创建)对象时使用的方法. 方法名必须与类名称完全相匹配: 构造方法不需要返回类型: 构造方法不能被static.final等关键字修饰,且不能有return返回语句: 伴随着new被调 ...

  7. 【洛谷P3835】 【模板】可持久化平衡树

    可持久化非旋转treap,真的是又好写又好调 ~ code: #include <cstdio> #include <cstdlib> #include <algorit ...

  8. idea开发工具

    IDEA简介 IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境.IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支 ...

  9. contest1 CF70 BetaRound ooxxx ooxxx ooooo

    CDE set之类不要直接用lower_bound, 要用set.lower_bound()

  10. PATA1035Password

    需要注意的就是把判定函数提取出来,这样可以简化代码,同时参数引用了&,可以对于传入参数进行修改. 参考代码: #define _CRT_SECURE_NO_WARNINGS #include& ...