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

news2024/11/23 2:48:56

背景

单体应用在向微服务化架构演进时,需要考虑如何解决服务认证授权的问题。如果处理不好,会引发架构的混乱,带来安全、性能、难以维护的问题。 以最典型的包含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.coloradmin.cn/o/65060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文华财经期货技术分析日内多空信号共振指标公式,波段行情短线抄单操盘幅图指标

​期货交易的很大一个误区是“痴迷于各种指标公式” 大家千万不要痴迷于指标,记住一点:行情软件界面之中的K线图叫主图,其余指标叫附图。 这从叫法上就该知道,我们寻找买卖点要在主图K线上来寻找,指标只是起到辅助分析的作用&…

操作系统02_内存分页管理_分段管理_设备管理_IO处理_索引文件结构_文件目录_位示图---软考高级系统架构师007

存储管理可以分为固定存储管理和分页存储管理。 现在固定存储管理已经不用也不考,但要知道因为固定存储管理指的是整存整取 也就是把一整个程序,比如说10G的游戏全部都存到内存里 这样的话是非常占用内存的,这个固定存储管理现在已经不用了。 然后这里我们主要看分页存储管: …

蓝桥杯比赛 NOC竞赛C++项目选择题真题和模拟题汇总

题目来源:第10届蓝桥杯青少年组C选拔赛 1、下面哪个密码最安全 A. 111111 B. 123456 C. qwerty D. Z2a8Q1 2、如果今天是星期六,再过60天是星期几? A. 星期三 B. 星期四 C. 星期五 D. 星期六 3、90到100之间有几个素数? …

mmcv和openCV两个库imcrop()和imresize()方法的对应【基础分析】

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录MMCV 全家桶mmcv.imresize(img, (1000, 600), return_scaleTrue) 方法实现对应的…

Unity 之 Post Processing后处理不同项目配置(URP项目配置)

Unity 之 Post Processing后处理不同项目配置(URP项目配置)一,Post Processing介绍二,正常项目配置2.1 场景配置2.2 摄像机配置2.3 集成步骤小结三,URP项目配置3.1 具体配置步骤3.2 最终实现效果四,代码控制…

【每天一个cmake技巧】简单的cmake demo

简单的cmake demo 一个简单的cmake 工程,包括生成动态库和链接动态库的demo工程和test工程。 demo下载链接: https://download.csdn.net/download/sinat_35178307/87243966 目录结构 该工程可以生成一个dll,一个调用dll的demo,…

【数据分享】维基百科Wiki负面有害评论(网络暴力)文本数据多标签分类挖掘可视化...

原文链接:http://tecdat.cn/?p8640讨论你关心的事情可能很困难。网络暴力骚扰的威胁意味着许多人停止表达自己并放弃寻求不同的意见(查看文末了解数据免费获取方式)。平台努力有效地促进对话,导致许多社区限制或完全关闭用户评论…

C++中的菱形继承问题及解决方案

存在问题 C中支持多重继承,但是由于这个特性,导致会有如下继承关系。 这样,类D就会同时拥有从类B中继承下来的A中的函数,也会拥有从类C中继承下来的A中的函数,会产生模糊调用的现象。 解决方案 为了解决这个问题&a…

spring源码 - AOP原理理解

AOP使用 1.我们都知道我们在使用spring aop时需要在configuration类上增加EnableAspectJAutoProxy 2.然后在准备AOP类就可以对相应类的方法进行aop Component Aspect public class MyAspect { Pointcut("execution(* com.my.service.*.*(..))") public void as…

利用WSL2搭建Qemu仿真Vexpress-a9开发环境

利用WSL2搭建Qemu仿真Vexpress-a9开发环境开发环境搭建更新软件源uboot-tools安装交叉编译环境安装qemu安装编译linux镜像和DBT文件启动qemu仿真kernelbusybox制作根文件系统制作rootfs使用u-boot启动kernel下载编译u-bootu-boot利用tftp网络引导方式启动Linux内核WSL2主机网络…

火爆朋友圈的ChatGPT是什么?

火爆朋友圈的ChatGPT是什么? 官方博客:https://openai.com/blog/chatgpt/ 背景 OpenAI,在美国成立的人工智能研究公司。2015年,OpenAI由马斯克、美国创业孵化器Y Combinator总裁阿尔特曼、全球在线支付平台PayPal联合创始人彼得…

Java入门教程(14) ——Scanner 获取键盘输入

在后台开发中,我们可能需要在运行的时候传递一些参数进去,该怎么处理呢? Java 提供了一个 Scanner 类,利用这个类,我们可以很方便的获取键盘输入的参数,接下来给大家详细介绍一下 1.首先导包 import jav…

到底什么是类脑计算?

当前感存算一体化的类脑神经拟态芯片流行,对其类脑计算的定义各家有各家的说法。但总之,类脑计算就是模拟人类思考方式的一种计算。 本文摘编自《类脑计算》(危辉著. 北京:科学出版社, 2022. 7)一书“第1 章什么是类脑…

“在别人恐惧时贪婪”,这支基金将在“自动驾驶寒冬”加大投资力度

交流群 | 进“传感器群/滑板底盘群”请加微信号:xsh041388交流群 | 进“汽车基础软件群”请加微信号:Faye_chloe备注信息:群名称 真实姓名、公司、岗位前段时间,Argo“关闭”的消息将寒气传给了全球自动驾驶产业的每一个人。再加…

[附源码]计算机毕业设计图书馆出版物预订系统Springboot程序

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

C#语言实例源码系列-实现批量图片格式转换

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

极客时间Kafka - 02 为什么要分区|生产者的分区策略|轮询策略|随机策略|消息键保序策略

文章目录1. 为什么分区?2. Kafka 生产者的分区策略1. 轮询策略 RoundRobinPartitioner2. 随机策略 UniformStickyPartitioner3. 按消息键保序策略 DefaultPartitioner我们在使用 Apache Kafka 生产和消费消息的时候,肯定是希望能够将数据均匀地分配到所有…

Jenkins-jenkins凭证管理与代码拉取

什么是凭证? Jenkins经常与第三方插件如git,docker等交互,需要提供第三方的凭证,比如access token,用户名和密码等 可以使用插件Credentials Binding Plugin来管理这些凭证 jenkins凭证类型 jenkins可以管理以下凭证…

UEFI的一点点概识

最近看了一篇Blog讲的是关于PC安全的,其中很多的地方还是有一定相似之处。其中这个UEFI引起了我兴趣,以前安装系统的时候听说过这个名词。这里于是便来认识一下什么是UEFI。 前言 大多数人接触UEFI都是在PC的应用场景上,有在PC上安装过多操…

关闭二维码

关闭二维码 结果演示 概述 通过事件的绑定来实现&#xff0c;关闭二维码的效果。 构建HTML框架 <body><div class"box">二维码<img src"images/tao.png" alt""><i class"close-btn"></i></div&g…