随着微服务架构的流行,系统架构调整,项目权限系统模块开发提上日程,需要对权限架构进行设计以及技术选型。所以这段时间看了下相关的资料,做了几个对比选择。

一、架构图

  初步设想的架构如下,结构很简单:eureka为服务注册中心,config是服务配置中心,redis做为缓存服务,gateway是后端网关。目前只设计了一套节点,考虑系统高并发高可用性后续可部署多套节点,Nginx做负载均衡以及增加熔断、失败重试等。系统流程为:客户端请求经Nginx转发到后端网关,网关直接转发到权限系统进行认证授权,统一在网关做鉴权,鉴权通过则转发到对应微服务。

二、技术选型

  ① 用户权限

  在传统的单体应用中,很多项目用的是shiro,毕竟shiro功能强大又灵活。而在Spring Cloud微服务架构中,好像大家更喜欢用Spring Security,所以了解了一下这两个框架的区别,大致如下:

  1. Shiro比Spring更容易使用、实现和理解。
  2. Spring Security更加知名是因为品牌名称。
  3. 很多人发现Spring Security使用比较麻烦。
  4. Spring Security有更好的社区支持。
  5. Apache Shiro在Spring Security处理密码学方面有一个额外的模块。
  6. Spring Security 对Spring 结合较好,并且不能脱离Spring,如果项目用的SpringMVC ,使用起来很方便。
  7. Shiro 功能强大、且 简单、灵活。是Apache 下的项目比较可靠,且不跟任何的框架或者容器绑定,可以独立运行。
  8. Spring Security支持Oauth、OpenID
  9. Spring Security的权限细粒度更高(关于这点,从我翻阅到的博客来看,大家一致表示还未发现高在哪里)

  从以上几点来看,各有优劣,根据具体项目需求进行选择。综合多种原因,我们选用了Spring Security。

  ② 用户认证

  传统的单体应用都是通过session来做用户认证,在前后端分离后偏向基于token认证。在微服务流行后,Spring Security 结合 OAuth 被推行。关于OAuth可以看看这篇文字 - 理解OAuth 2.0

  OAuth2分为认证服务器和资源服务器:在这个架构中,Auth Server作为认证服务器,负责对客户端进行认证授权,为客户端颁发令牌。Gateway作为资源服务器,负责对token进行验证来判断是否允许客户端的访问操作。

  OAuth2包含4种授权模式:

  • 授权码(认证码)模式 (Authorization code)
  • 简化(隐形)模式 (Impilict
  • 密码模式 (Resource Owner Password Credential)
  • 客户端模式 (Client Credential)

  根据项目业务情况,我们这里目前采用密码模式,随着项目运作模式的改变、版本的大更新,后面不排除会使用其他授权模式。

  ③ JWT认证协议

  JWT(JSON Web Token)是一种认证协议,是目前最流行的跨域身份验证解决方案。它将用户信息加密到token里并由客户端存储,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。

  JWT优点是可以解决Session共享问题,提高后端服务的可用性和扩展性;缺点是无法作废已颁发的令牌,虽然可以通过其他途径实现,但是不免有些麻烦,而且违背了JWT的初衷。结合我们的项目来看,我认为使用JWT的弊是大于利的,所以这里我不打算使用JWT,延续以往的实现方式,在Redis中维护token。

三、系统工作流

  简单画了下访问系统时系统的工作流:

  系统架构的设计相对简单,后续可能还要经过讨论进行调整。架构需要达到业务需求并且具备高并发、高可用、可扩展性,不能因为项目的变更或者用户体量上升等等原因出现不可扩展、重构、大调整等问题。

Spring Cloud微服务下的权限架构调研的更多相关文章

  1. Spring Cloud 微服务项目实现总架构一

    Spring Cloud 服务是一种分布式服务,包括配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,主节点选举, 分布式session, 集群状态等公共组件. 一  注册机 ...

  2. spring cloud微服务下手动回滚事务

    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 这里使用的场景是,跨服务调用接口,比如:用户信息和用户积分 ...

  3. 一张图了解Spring Cloud微服务架构

    Spring Cloud作为当下主流的微服务框架,可以让我们更简单快捷地实现微服务架构.Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟.经得起实际考验的服务框架组合起来 ...

  4. 如何优化Spring Cloud微服务注册中心架构?

    作者: 石杉的架构笔记 1.再回顾:什么是服务注册中心? 先回顾一下什么叫做服务注册中心? 顾名思义,假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相 ...

  5. Dubbo和Spring Cloud微服务架构比较

    Dubbo 出生于阿里系,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司:只需要通过 Spring 配置的方式即可完成服务化,对于应用无入侵,设计的目的还是服务于自身的业务为主. 微服 ...

  6. Dubbo 和 Spring Cloud微服务架构 比较及相关差异

    你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构. 微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务, ...

  7. 全链路实践Spring Cloud 微服务架构

    Spring Cloud 微服务架构全链路实践Spring Cloud 微服务架构全链路实践 阅读目录: 网关请求流程 Eureka 服务治理 Config 配置中心 Hystrix 监控 服务调用链 ...

  8. Spring Cloud 微服务架构解决方案

    1 理解微服务 1.1 软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程. 1.1.1 单体架构 特点: 1.所有的功能集成在一个项目工程中. 2.所有的功能打一个 ...

  9. Spring Cloud微服务初探

    学习初衷 因为加了不少优秀的知识星球,结交了更多的小伙伴,加了更多的群,每每在自我介绍的时候,都说自己是Android & Java攻城狮. 然鹅,有的小伙伴就来问了,你是搞Java的,那对S ...

随机推荐

  1. C语言闰年问题程序框图

    判定2000-2500年中的每一年是否为闰年,并将结果输出. 先分析闰年成立条件: 1)能被4整除,但不能被100整除的年份都是闰年: (2)能被400整除的年份是闰年: #include<st ...

  2. ntelliJ IDEA 仿照vs2017快捷键设置,以及字体颜色设置

    因后期工作需要使用java技术栈,所以近期抽空下载了intelliJ IDEA工具,但是作为一个Net开发者,在使用了vs以后,感觉在使用别的开发工具感觉就是没法和vs相比,毕竟vs被称为宇宙最强id ...

  3. 函数append()和html()的区别

    它们的功能缺失有点相似,但是实际上本质上是有区别: append()函数是为指定元素尾部附加内容,而html()函数是重置元素内部的html内容.·

  4. GXB动态重配置

    可选择重配置逻辑(Optional Reconfiguration Logic) 使能选项: • Capability registers • Control and status registers ...

  5. Python之xml学习笔记

    XML处理模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式如下,就是通过&l ...

  6. android-mediaplayer播放

    优先参考 待补充.android 8.0

  7. SQL给数据编号

    方法:ROW_NUMBER() over(order by getdate()) AS num 使用案例 : select * From (select  ROW_NUMBER() over(orde ...

  8. 01 of lenrning python

    我也打算开始写博客啦!记录一下自己的学习过程~ 01密文登陆 这个在vscode中不显示密文 在cmd中看不到密码 # -*- coding: utf-8 -*- import getpass nam ...

  9. 本周对于java中lamdba表达式与内部进行了学习 ,以下是我在学习就中遇到的问题

    在java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.我觉得其实就是类的嵌套,在一个类中再定义一个类,这里已成员内部类为讲,内部类可以自由地运用外部类定义的方法,但外部类想 ...

  10. 背水一战 Windows 10 (107) - 通知(Toast): 提示音, 特定场景

    [源码下载] 背水一战 Windows 10 (107) - 通知(Toast): 提示音, 特定场景 作者:webabcd 介绍背水一战 Windows 10 之 通知(Toast) 提示音 特定场 ...