微服务架构下的认证鉴权解决方案

news/2024/5/6 16:30:02/文章来源:https://blog.csdn.net/Park33/article/details/128183181

背景

单体应用在向微服务化架构演进时,需要考虑如何解决服务认证授权的问题。如果处理不好,会引发架构的混乱,带来安全、性能、难以维护的问题。 以最典型的包含WEB页面的具备登录态管理的系统为例。在最初阶段,登录鉴权一般通过cookie+redis分布式session来实现。

​在服务化过程中,单体系统会拆分为多个微服务,这时微服务间会出现相互调用。对于使用Dubbo、Grpc等RPC协议的系统而言,由于给web页面提供的是HTTP接口,而给微服务间调用提供的RPC接口,架构比较清晰。而对于Springcloud技术体系,微服间调用和页面都是通过HTTP RESTFUL接口,这时候要解决两个问题:

  1. web页面的登录校验

  2. 微服务之间的鉴权

解决方案

透传cookie反模式

这种方案希望保持单体架构时的调用方式,微服务间调用接口复用了提供给WEB页面的接口。 为了解决登录鉴权问题,微服务间调用时,会将WEB页面的cookie透传至其他服务,这样鉴权逻辑可以保持不动。 很显然,该方案虽然看上去能很好work,但它是一种反模式设计,完全违背了微服务的初衷,微服务一定是无状态的!

内外接口分离模式

很显然,上述方案是不合理的。如果想继续保持服务间调用使用RESTFUL域名,则可以将面向前端的接口与面向微服务的接口区分开,实现方式是为两者加上不同的URL前缀,如/inner、/outer。外部接口是给WEB页面调用的,内部接口是专门给微服务间调用的。在认证鉴权时,仅针对外部接口进行鉴权,而内部接口直接放行。 该方案的问题是,内部接口存在安全隐患,可以被外界肆意攻击。 如果要缓解该问题,可通过如下方式:

  1. 申请一个额外的生产网段的域名(需做七网隔离,外网/办公网/生产网段无法互相访问),专门用于服务间调用。

  2. 在Nignx侧增加配置,对于原有的域名,只放行以outer前缀开始的请求。

web和服务分离模式

上述方案的另外一个变种,仍是将对外接口和对内接口分开,但是划分的更加彻底,新增了一个专门提供面向前端提供web接口的服务,如下图所示。该方案的优点:

  1. 微服务不需要关心如何校验session,所有认证都在web服务做。这个微服务是真正无状态的。

  2. 微服务间的调用不做鉴权。

  3. 微服务是高度通用的,只需要处理领域核心逻辑,不用关心如何和前端页面适配,这点对于平台型服务尤其如此。

对于该方案中因内部接口调用产生的安全问题,可参考上个方案,申请一个额外的生产网段的域名。

​网关鉴权

对于有中台的技术团队而言,一般都会有提供一个通用的平台网关。我们希望在网关解决所有登录鉴权的问题,这使得登录鉴权问题对业务服务完全透明。而对于服务间调用的问题,可使用rpc、类rpc方式(ServiceMesh)、内部域名来实现,而这些调用方式都是零信任无鉴权的。 对于这种方案,微服务的api有很大的通用性和灵活性,接口设计不需要区分接口使用的场景,是目前业界比较推荐的做法。

总结

本文介绍了服务在从单体演进到微服务架构过程中,对于服务认证鉴权遇到的问题,并提供了开发人员可能会用到的解决方案。除方案1外(不大合理、属于野路子),其他方案在具体实践过程中都有较多的case。如今微服务架构已经成为事实上的标准,我们希望微服务一定是无状态的,专注于处理业务流程和规则,而鉴权认证的逻辑应交给专门的技术组件来负责,因此让网关来统一处理鉴权是一个更优雅的方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_230705.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL学习笔记(十三)count(*),count(id),count(1),count(字段)区别

count count 是MySQL的一个查询数量统计的函数,我们在平常的工作中经常会用到,count(*),count(id),count(1),count(字段)这4种写法有什么区别呢? //星号 select count(*) from user; //常数 select count(1) from user; //id(主键) select …

[附源码]计算机毕业设计JAVA疫情居家隔离服务系统

[附源码]计算机毕业设计JAVA疫情居家隔离服务系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM my…

易基因课程回顾|表观遗传学和表观育种在品种改良中的应用研究

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 传统作物育种包括杂交、选择所需性状的遗传变异,导致遗传基础缩窄和遗传多样性缺失,从而阻碍作物改良。表型性状受遗传学和表观遗传学影响,利用表观遗传…

Java进阶架构师之如何画好架构图?阿里大神手把手教你!

1、什么是架构 架构就是对系统中的实体以及实体之间的关系所进行的抽象描述,是一系列的决策。 架构是结构和愿景。 系统架构是概念的体现,是对物/信息的功能与形式元素之间的对应情况所做的分配,是对元素之间的关系以及元素同周边环境之间…

小程序webView页面转发后,进入页面空白

小程序webView页面,在点击右上角按钮分享后,进入分享的链接页面空白 重新进入页面后,页面空白。使用电脑打开之后报错提示如下 一、排查页面转发后,页面地址有没有解码 webview页面转发后,小程序会将url参数转码&…

莱特飞行优化及其使用场景

莱特飞行优化及其使用场景 一,莱特飞行 但是产生一个莱特飞行分布的随机数是比较难的,莱特只给出了一个积分,所以后面就有人提出了如何制造这样分布的随机数。 Mantegna 在1994年提出的一种用正态分布求解随机数的方法,有时也叫…

【多线程(三)】生产者和消费者模式

文章目录3.生产者和消费者模式前言3.1生产者和消费者模式概述3.2生产者和消费者案例3.3 阻塞队列基本使用3.4 阻塞队列实现等待唤醒机制总结3.生产者和消费者模式 前言 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线 程开发…

使用OpenCV的函数hconcat()、vconcat()实现图像或矩阵的连接

使用OpenCV的函数hconcat()、vconcat()实现图像或矩阵的连接 函数hconcat()在水平方向上连接图像或矩阵; 函数vconcat()在垂直方向上连接图像或矩阵。 两个函数的原型和使用方法一模一样,所以在下面的函数原型介绍中,只介绍函数hconcat()的…

人工智能:声纹相关基础概念介绍

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

软件测试工程师涨薪攻略!3年如何达到30K!

1.软件测试如何实现涨薪 首先涨薪并不是从8000涨到9000这种涨薪,而是从8000涨到15K加到25K的涨薪。基本上三年之内就可以实现。 如果我们只是普通的有应届毕业生或者是普通本科那我们就只能从小公司开始慢慢往上走。 有些同学想去做测试,是希望能够日…

[附源码]计算机毕业设计设备运维平台出入库模块APPSpringboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【数据结构】建堆的方式、堆排序以及TopK问题

建堆的方式、堆排序以及TopK问题1、建堆的两种方式1.1 向上调整建堆1.2 向下调整建堆2、堆排序3、TopK问题4、建堆、堆排序、TopK问题全部代码1、建堆的两种方式 我们知道,堆是二叉树的一种,二叉树的建立是借助结构体与数组完成的(通过在结构…

Java IO流(详解)

1. File1. 创建2. 操作1. 获取文件信息2. 目录创建/删除2. IO流1. FileInputStream1. 简单使用2. 读取中文2. FileOutputStream1. 简单使用2. 追加写入3. 文件拷贝4. FileReader1. 简单使用2. 提高读取速度5. FileWriter1. 简单使用6. 节点流和处理流简介7. BufferedReader1. 简…

yolo后处理操作-如何获取我们想要的目标框及置信度?

yolo后处理就是模型的输出进行处理,得到我们想要的坐标框的xywhxywhxywh以及confidenceconfidenceconfidence 学习笔记 这是yolov1的模型,他将图像划分成了7x7个网格,每个网格负责预测两个边界框,每个边界框都有5个信息$x、y、w、…

腾讯云年终选购云服务器攻略!

随着云计算的快速发展,很多用户都选择上云,上运中最常见的产品就是云服务器CVM和轻量应用服务器了,那么怎么选购最优惠呢,这篇文章将介绍新老用户选购腾讯云服务器的几个优惠方法。 一、买赠专区 第一个介绍的就是买赠专区&…

MySQL下载安装运行

方式1、MySQL 官方网站:http://www.mysql.com 拉到最下面: 方式2、Windows版 MySQL 的官方下载地址:https://dev.mysql.com/downloads/mysql/ 配置环境变量:在Path中添加至“\bin”(系统盘C盘)形式 使用管…

(02)Cartographer源码无死角解析-(33) LocalTrajectoryBuilder2D: 点云数据流向、处理、消息发布等→流程复盘

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…

我国跨国企业外汇风险管理——以海尔公司为例

目 录 摘 要 I 一、 绪论 1 (一) 选题背景及意义 1 (二) 国内研究现状 1 1. 国外研究现状 1 2. 国内研究现状 3 (三) 研究内容及方法 3 (四) 跨国企业外汇风险…

java+mysql基于SSM的大学生兼职信息系统-计算机毕业设计

开发环境 运行环境: 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:SSM(springspringMVCmybatis)vue 项目介绍 论文主要是对大学生兼职信息系统进行了介绍,包括研究的现状,还有涉及的开发背景,然…

构建全真互联数字地图底座 腾讯地图产业版WeMap重磅升级

前言 :伴随着地理信息产业的不断演进,以及LBS、大数据、5G、云、AI等新技术的持续应用,数实融合发展呈现出加速态势,数字地图也从移动互联网时代向产业互联网时代进化。 WeMap腾讯地图产业版重磅升级!12月1日&#xff…