微服务架构下认证和鉴权理解

news2025/7/5 8:42:23

认证和鉴权

从单体应用到微服务架构,优势很多,但是并不是代表着就没有一点缺点了。

微服务架构,意味着每个服务都是松散耦合的。因此,作为软件工程师和架构师,我们在分布式架构中面临着安全挑战。微服务对外开放的端点,我们称之为:API。

  • 单体应用只需要保护自己就可以了,而微服务的攻击面则很大,这意味着越多的服务将会带来更大的风险,每个服务都得保证其安全性。
  • 在单体架构中,组件之间通过方法来相互调用。而微服务则是依靠开放的API来相互调用,除了要保证其安全性,还得保障其可用性。

因此,根据上述的安全挑战,我们可以得出一个结论:微服务与单体应用有着不同的安全处理方式。

认证和授权的区别

我们在谈论应用程序安全的时候,总是会提到:认证 (Authentication)和 鉴权 (Authorization)这两个术语。但是,总有人很容易混淆概念。
在这里插入图片描述
身份验证(Authentication) 的过程当中,我们需要检查用户的身份以提供对系统的访问。在这个过程当中验证的是 “你是谁?” 。故而,用户需要提供登陆所需的详细信息以供身份的验证。

授权(Authorization) ,是通过了身份验证之后的用户,系统是否授权给他访问特定信息(读)或者执行特定的操作(写)的过程。此过程确定了 用户拥有哪些权限

微服务下的认证和授权策略

可以想到的解决方案有以下这么几种:

  • 无 API 网关
    1. 每个服务各自为政,各自进行认证和鉴权
    2. 拆分出 认证授权服务 进行全局的认证和鉴权
  • 有 API 网关
    1. 在网关上进行全局的认证,每个服务各自鉴权
    2. 在网关上进行全局的认证和鉴权
    3. 拆分出 认证服务 进行全局的认证,在网关上进行鉴权

比较推崇 有 API 网关-3 这种策略,为什么呢?

  1. 认证对于鉴权来说,是频度较低的服务:登陆不常有,鉴权则发生在每一个API调用上;
  2. 往往认证会相对复杂,具有特异性,难以做到通用化。而鉴权不会特别复杂,容易做到通用化。

有状态和无状态身份验证

当一个设备(客户端)向一个设备(服务端)发送请求的时候,服务端如何判断这个客户端是谁?传统意义上的认证方式又两种:有状态认证无状态认证。有状态认证和无状态认证最大的区别就是服务器会不会保存客户端的信息。

有状态身份验证
有状态认证,以cookie-session模型为例,当客户端第一次请求服务端的时候,服务端会返回客户端一个唯一的标识(默认在cookie中),并保存对应的客户端信息,客户端接受到唯一标识之后,将标识保存到本地cookie中,以后的每次请求都携带此cookie,服务器根据此cookie标识就可以判断请求的用户是谁,然后查到对应用户的信息。

无状态身份验证
无状态的认证,客户端在提交身份信息,服务端验证身份后,根据一定的算法生成一个token令牌返回给客户端,之后每次请求服务端,客户端都需要携带此令牌,服务器接受到令牌之后进行校验,校验通过后,提取令牌的信息用来区别用户。

总结

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

参考

Kratos微服务框架下的认证和鉴权

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

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

相关文章

PLE详解

具体的实践中,我们主要参考了腾讯的PLE(Progressive Layered Extraction)模型,PLE相对于前面的MMOE和ESMM,主要解决以下问题: 多任务学习中往往存在跷跷板现象,也就是说,多任务学习相对于多个单任务学习的…

Linux/Ubuntu服务自启动原理剖析及三种实现方式

面向Linux系统,并非只是Ubuntu;系统版本不同,配置上可能有所不同。 1、自启动的原理剖析 1.1、 运行等级 Linux分了7个运行等级,分别用数字0,1,2,3,4,5,6表示…

【Python】【进阶篇】十八、Python爬虫获取动态加载数据

目录十八、Python爬虫获取动态加载数据18.1 确定网站类型18.2 影片详情信息18.3 影片总数量18.4 影片类型与类型码18.5 编写完整程序十八、Python爬虫获取动态加载数据 如何获取电影“分类排行榜”中的电影数据(电影),比如输入“剧情”则会输…

用EasyX图形库画一个哆啦A梦

继续说图形库,加一点实战用图形画图(用来巩固代码): rectangle这个函数 四个参数,左上角坐标的x,y值,右下角坐标的x,y值;因为只要有两个点,就可以以它们的横坐标之差为长&#xff…

三范式建模和维度建模,到底该选哪一个?

编辑导语:当你需要从头开始设计数据仓库时,你会选择哪种建模方式?也许,你会从三范式建模和维度建模二者中选择。但是这二者有其各自的适用范围,具体选择哪种方法,还需要回归至业务层。本篇文章里&#xff0…

day-004-链表-两两交换链表中的节点、删除链表的倒数第N个节点、链表相交、环形链表II

两两交换链表中的节点 题目建议:用虚拟头结点,这样会方便很多。 题目链接/文章讲解/视频讲解 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* Li…

手麻系统源码,手术麻醉管理系统源码,二次开发方便快捷

手术麻醉管理系统源码,手麻系统源码,C# .net 桌面软件 C/S版 手术麻醉管理系统采用下拉式汉化菜单,界面友好,实用性强,设有与住院、病区、药房等系统的软件接口。 文末获取联系! 开发语言:C# …

4.1 随机变量的数学期望

学习目标: 如果我想学习随机变量的数学期望,我可能会采取以下步骤: 掌握概率论基础知识:在学习随机变量的期望之前,我需要了解概率论的基本概念,例如概率、随机变量、概率密度函数等。 学习数学期望的定义…

算法总结---最常用的五大算法(算法题思路)

一、总结 一句话总结: 【明确所求:dijkstra是求点到点的距离,辅助数组就是源点到目标点的数组】 【最简实例分析:比如思考dijkstra:假设先只有三个点】 1、贪心算法是什么? 当前看来最好的选择 局部最…

第二章(2):从零开始掌握PyTorch基础知识,打造NLP学习利器

第二章(2):从零开始掌握PyTorch基础知识,打造NLP学习利器! 目录第二章(2):从零开始掌握PyTorch基础知识,打造NLP学习利器!1. Pytorch基础1.1 Pytorch安装1.1.…

计算机网络考试复习——第四章 4.1 4.2.1 4.2.2

网络层传输的单位是IP数据报 4.1 网络层的几个重要概念 网络层提供的两种服务:网络层应该向运输层提供怎样的服务?面向连接还是无连接? 在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统? 面向连…

X79G Xeon 2630v2 电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔) 硬件型号驱动情况 主板X79G 处理器Intel Xeon 2630v2已驱动 内存32g (16*2 2666MHZ)已驱动 硬盘Intel 760p 512GB已驱动 显卡RX 470已驱动 声卡瑞昱 英特尔 High De…

硬件外设使用方法——GPIO

【硬件外设使用】——GPIO用法GPIO基本概念GPIO应用pyb与micropython什么是pyb什么是micropythonpyb与micropython关系GPIO在micropython中的用法什么是pyb库pyb库中的GPIO用法micropython下的GPIO用法经过与硬件群的小伙伴商量,决定直接找个板子讲实战了- -。 本部…

qt动态加载qss 更好的推荐方式

1、编写QRC资源文件[window和linux通用] 2、过rcc程序生成rcc资源文件 生成2进制数据: 通过控制台窗口执行以下命令,会把qrc中的资源文件写成二进制数据保存 rcc.exe -binary .\resuorce.qrc -o .\resuorce.rcc 生成16进制数据: 通过控制台窗…

JavaSE学习进阶day03_02 内部类

第二章 内部类(最难的) 2.1 概述 2.1.1 什么是内部类 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。可以把内部类理解成寄生,外部类理解成宿主。 2.1.2 什么时候使用内部类 一个事物内…

STM32驱动SIM900A短信模块

简介:STM32F103C8T6驱动SIM900A短信模块源码介绍。 开发平台:KEIL ARM MCU型号:STM32F103C8T6 传感器型号:SIM900A 特别提示:驱动内可能使用了某些其他组件,比如delay等,在文末外设模板下载…

协议篇之以太网协议基础概念

协议篇之以太网协议基础概念一、写在前面二、什么是以太网三、以太网TCP/IP协议分层四、MAC地址与IP地址五、写在后面一、写在前面 在学习了串口协议后,发现通过串口传输数据,数据传输的速率较慢,无法符合高速率传输场景下的要求,…

PXE+Kickstart自动化安装操作系统

文章目录PXEKickstart 完美自动化部署系统理论知识:1、PXE2、DHCP实践实验:1、DHCP服务器配置2、TFTP服务器配置3、HTTP服务器安装4、PXE配置5、Kickstart实践配置PXEKickstart 完美自动化部署系统 理论知识: 无人值守原理:Kick…

飞行机器人专栏(十一)-- 空中机器人综合健康管理系统

目录 一. 综合健康管理系统架构 1. 系统架构: 2. 故障诊断算法: 3. 预测维护策略: 4. 安全与隐私: 5. 用户友好性: 6. 模块化与可扩展性: 7. 与其他系统集成: 8. 考虑环境因素&#xf…

获取文件内容方法使用说明

一、是什么? sikuli设备新增了一个获取文件内容的方法,该方法可以传入指定路径读取文件内容,方便后续做打印,对比等工作 二、怎么用? 1.文件绝对路径,例如 windows:F:\cn_sonic\sonic-agent…