盘点微服务架构下的诸多身份验证方式

50a4918e9d530aee9dcc7c9615607bd1.gif

身份认证是授予用户访问系统并授予使用系统的必要权限的过程。而提供了这一功能的服务,就是身份认证服务。

作者 | 罗泽轩, 赵士瑞      责编 |梦依丹

出品 | CSDN(ID:CSDNnews)

在传统的单体软件应用程序中,所有这些都发生在同一个应用程序中。但在微服务架构中,系统由多个服务组成,在这样的架构中,每个微服务都有自己的任务,因此为每个微服务分别实现授权和身份验证过程并不完全符合此原则。

本文将从传统服务架构和微服务架构下的身份认证方式区别进行讨论,并最终衡量微服务架构中身份认证服务的各种实现方式的优劣。

990f3f18ba7b3d6d672366b1609986a0.png

传统服务架构中的身份认证服务

在企业开发服务的早期,所有功能都是做到同一个应用程序里面的。我们把这种模式称之为 “单体”,以跟当下更为主流的 “微服务” 架构区分开来。

单体应用由单个不可分割的单元组成。它通常由各个业务线各自开发,但是部署时放入到同一个环境中。所有这些都紧密集成以在一个单元中提供所有功能。这一单元里拥有所需的所有资源。单体应用的好处在于部署迭代简单,适合业务线较少且比较独立的公司采用。

随着企业开发出来的业务越来越复杂,我们会发现单体服务已经无法满足现实生活里面快速迭代的需要了。我们需要把这个单体的巨无霸拆分一下,同时保证现有的各个功能间的调用能正常进行。这时候,ESB(企业服务总线)便应运而生了。

所谓的 “企业服务总线”,就是一根连接各个企业服务的管道。ESB 的存在是为了集成基于不同协议的不同服务,ESB 做了消息的转化、解释以及路由的工作,以此来让不同的服务互联互通。从名称就能知道,它的概念借鉴了计算机组成原理中的通信模型 —— 总线,所有需要和外部系统通信的系统,统统接入 ESB,就可以利用现有的系统构建一个全新的松耦合的异构的分布式系统。

ESB 做了消息的转换解释与路由等工作,让不同的服务互联互通。传统的 ESB 的服务调用方式是,每一次服务的调用者要向服务提供者进行服务交互请求时都必须通过中心的 ESB 来进行路由。

接下来将按照这两种情况,分别描述对应的身份认证功能的实现。

单体架构

单体架构下,用户身份验证和会话管理相对简单。身份认证和授权发生在同一个应用程序中,通常使用基于 session 的认证方案。一旦通过身份验证,就会创建一个会话并将其存储在服务器上,任何需要它的组件都可以访问它并用于通知和授权后续要求。会话 ID 被发送到客户端并用于应用程序的所有后续请求,以将请求与当前会话相关联。

ESB 架构

在 ESB 架构下,所有用户与服务之间,服务与服务之间全部通过 ESB 总线进行处理。由于 ESB 的架构是从单体拆分下来的,身份认证方式相对于单体架构并没有变化。

6d4e22ee57f81484bc9df77eff17d827.png

微服务架构中的身份认证服务

从单体架构迁移到微服务架构有很多优势,但微服务架构作为一种分布式架构,会存在更大的攻击面,共享用户上下文更加困难。因此微服务架构下需要有跟传统架构不一样的身份认证服务,才能响应更大的安全性挑战。

目前,我们可以把微服务架构下的身份认证服务分为以下三类:

  • 通过每个微服务实现身份认证;

  • 通过身份认证服务实现身份认证;

  • 通过网关实现身份认证。

当然,每种做法都有自己特定的优缺点。

通过每个微服务实现身份认证

056dc30e6ba06133863cbff7f28144f8.jpeg

既然微服务架构是从单体架构拆分出来的,因此比较自然的过渡方式就是由每个微服务自己实现身份认证。

每个微服务都需要实现自己独立的安全性保障,并在每个入口点上强制执行。此方法使微服务团队能够自主决定如何实现其安全解决方案。但是,这种方法有几个缺点:

  • 安全逻辑需要在每个微服务中重复实现,这会导致服务之间的代码重复。

  • 它分散了开发团队的注意力,使其无法专注于其主要服务。

  • 每个微服务都依赖于它不拥有的用户身份验证数据。

  • 很难维护和监控。

完善这个解决方案的选择之一就是使用一个加载在每个微服务上的共享认证库。这个操作可以防止代码重复,开发团队将只关注他们的业务领域,但仍然存在这种改进无法解决的缺点。

因为共享的认证库仍然需要有对应的用户身份数据,而且还需要保证各个微服务使用同样版本的认证库。老实说,共享认证库更像是服务拆分不透彻的结果。

因此这种方式总结来说,优势在于实施速度快,独立性强;而劣势也比较明显,服务之间的代码重复、违反单一职责原则,较难维护。

通过身份认证服务实现身份认证

c67bea1e51c3387669cf683383f677d7.jpeg

既然每个微服务自己实现身份认证难以维护,而使用共享认证库又违背了微服务拆分的本意,那么能不能把共享认证库升级成专门的身份认证服务呢?

在这种情况下,所有访问都通过同一服务进行控制,类似于单体应用里面的身份认证功能。每个业务服务都必须在执行操作时,向访问控制模块发送单独的授权请求。

但是,这种方法在一定程度上减慢了服务的运行速度,并增加了服务之间的互连量。并且各个微服务会依赖这个“单点”的身份认证服务。万一统一的身份认证服务出问题,会造成链式反应,带来二次伤害。

所以总结来看,这种方式虽然确保了每个微服务职责单一,使得身份认证功能更加集中。但是仍会造成单点依赖,进而增加请求延迟。

通过网关实现身份认证

77f89cf774b77b21f4baee25a13458a8.jpeg

迁移到微服务体系结构时,需要回答的问题之一是微服务之间如何通信。前面提到的 ESB 是种方案,但是更常见的选择则是采用 API 网关。

API 网关是所有请求的单个终端节点入口,它通过充当使用这些微服务的中央接口来提供灵活性。某个需要访问其他微服务的微服务(以下称之为“客户端”,以跟被它访问的微服务相区分)无权访问多个服务,而是需要向负责将其路由到上游服务的 API 网关发送请求。

由于 API 网关位于客户端访问的必经之路上,因此它是强制实施身份验证问题的绝佳选择。使用 API 网关可以减少延迟(调用身份验证服务),并确保身份验证过程在整个应用程序中保持一致。

举个例子,通过 APISIX 的 jwt-auth 插件,我们可以在网关上实现身份认证。

首先,我们需要规划若干个用户身份信息(名称、密钥等等),并将其配置到 APISIX 上。 其次,根据给定的用户密钥,向 APISIX 发起签名请求,得到这个用户的 JWT token。 接着,当客户端需要访问某个上游服务时,带上 JWT token,由 APISIX 作为 API 网关代理该访问。 最后,APISIX 会通过 JWT token,完成身份认证的操作。

当然,凡事有利就有弊,没有完全无劣势的技术选型。使用网关来完成身份认证,还是带来了少许单点问题。比起在每个微服务内完成身份认证,在网关上解决该问题,安全性相比会降低些。比如 API 网关被攻破之后,就可以访问该网关背后的任何微服务。但是风险是相对的,比起统一的身份认证服务,使用 API 网关的单点问题并没有那么严重。

因此这种方式操作起来,在优势上较为明显,比如可以有效保护后端微服务,微服务不用处理任何认证逻辑等。但同时还是会存有少许的单点依赖。

7569c211f5eb20cd6f0c3e44a55cd4e6.png

总结

在不同的场景下,我们会需要不同的身份认证方案。在单体应用中,身份认证发生在同一个应用程序中,服务端保存了所有的会话。进入微服务时代,单体应用演变为分布式服务,单体应用中的身份认证方式在微服务中并不适用。在微服务架构中,我们有上述提到的三种身份认证的方式可供选择。每种选择都有属于自己的利弊,需要根据具体的实际情况做具体分析。

作者简介:

罗泽轩,API7.ai 技术专家、Apache APISIX PMC 成员;

赵士瑞,API7.ai 技术工程师,Apache APISIX Committer。

c136ae727d7948b526367036a3804f3b.gif

《2022-2023 中国开发者大调查》重磅启动,欢迎扫描下方二维码,参与问卷调研,更有 iPad 等精美大礼等你拿!

52209de1949d78c9cc04fb7eb84ac21e.png

 
☞微软欲用 ChatGPT 扶必应“上位”,对抗 Google!
☞字节辟谣被裁员工与 HR 互殴;苹果头显多个新功能曝光;谷歌希望 RISC-V 成为 T1 级 Android 架构|极客头条
☞UNIX 工作站的大规模灭绝

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

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

相关文章

第5章信息系统工程

信息系统工程是用系统工程的原理、方法来指导信息系统建设与管理的一门工程技术学科,它是信息科学、管理科学、系统科学、计算机科学与通信技术相结合的综合性、交叉性、具有独特风格的应用学科。当前信息系统工程的主要任务是研究信息处理过程内在的规律&#xff0…

离职两年后,程序员遭前东家索赔:Bug是你写的

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇 整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 问:身为一名程序员,你能确保至今写的代码中没有一个 Bug 吗&…

ChatGPT 过时了,Auto-GPT才是未来

Auto-GPT概述 AutoGPT 是一项卓越的 AI 技术,一个实验性开源应用程序,它通过 API 利用 GPT-4 和 GPT-3.5 通过迭代自己的提示并在每次迭代中构建它们来创建成熟的项目。Auto-GPT是 GPT-4 完全自主运行并突破 AI 可能性界限的首批示例之一。它可以读写文件…

【PPT】《挑战用chatgpt完成流水线操作的ppt,再也不用担心每周肝组会报告ppt了#人工智能 #chatgpt应用领域 快学起来!!!》- 知识点目录

《挑战用chatgpt完成流水线操作的ppt,再也不用担心每周肝组会报告ppt了#人工智能 #chatgpt应用领域 快学起来!!!》 1. PPT文字模板说明(Prompt) 我的名字叫做【haozi】,帮我制作一篇内容为《如何做好一名…

如何通过ChatGPT快速生成PPT?ChatGPT搭配闪击PPT生成PPT,你只需要输入一个标题

了解闪击PPT的【文字转PPT】功能 闪击PPT有一个文本转PPT功能,这也是今天的主角 我的名字叫做芝士不吃,帮我制作一篇内容为《秦朝为什么会灭亡》PPT,要求如下: 第一、一定要使用中文。 第二、页面形式有3种,封面、目…

【3分钟高效制作PPT】ChatGPT搭配闪击PPT生成PPT,你只需要输入一个标题

Hello,大家好,我是你的好伙伴AI博士 今天我来分享一下,怎么用ChatGPT配合闪击PPT,只输入一个标题,怎么生成一份高颜值的PPT。 第一步:了解闪击PPT的【文字转PPT】功能 闪击PPT有一个文本转PPT功能&#x…

如何使用ChatGPT的API(一)大语言模型如何工作

这篇文章介绍大语言模型的一些概念,包括它是如何工作的,什么是Token等等。 大语言模型如何工作 我们从一个示例开始说起。 当我们写一个提示“我喜欢吃”,然后要求一个大型语言模型根据这个提示填写后面可能的内容。它可能会说&#xff0c…

IP-Guard能否限制PC端微信登录?

能否限制PC端微信登录? 不能限制微信登录,但可以通过应用程序控制策略,禁止微信程序启动。 在控制台-【策略】-【应用程序】,添加以下策略: 动作:禁止 应用程序:wechat.exe 可以实现禁止微信启…

七年老程序员的三四月总结:三十岁、准备婚礼、三次分享

你好,我是 shixin,一名工作七年的安卓开发。 每两个月我会做一次总结,记下这段时间里有意义的事和值得反复看的内容,为的是留一些回忆、评估自己的行为、沉淀有价值的信息。 一转眼 2023 年过去了三分之一,这两个月经历…

一张图就是一个故事,用 SceneXplain 讲个好故事

精准的图像描述不仅可以让人们更容易理解图像背后的故事和信息,还可以让图像更易于被检索和识别。然而,对于那些复杂的图像来说,写出既准确又详细的描述实在是件非常困难的事情。 图像描述算法的演变 所谓 Image Caption(图像描述)任务&#…

NLP 中语言表示 (向量化) 的基本原理和历史演变综述

目录 1 前言2 语言表示2.1 离散表示2.1.1 独热编码2.1.2 词袋模型2.1.3 TF-IDF 模型2.1.4 N-gram 模型2.1.5 基于聚类的表示 2.2 连续表示2.2.1 分布式表示2.2.2 Word Embedding2.2.2.1 Word2Vec2.2.2.2 GloVe2.2.2.3 FastText 2.2.3 基础神经网络模型2.2.3.1 神经词袋模型2.2.…

七年程序员的三四月总结:三十岁、准备婚礼、三次分享

你好,我是 shixin,一名工作七年的安卓开发。 每两个月我会做一次总结,记下这段时间里有意义的事和值得反复看的内容,为的是留一些回忆、评估自己的行为、沉淀有价值的信息。 一转眼 2023 年过去了三分之一,这两个月经…

SceneXplain:让 ChatGPT 开启视觉视角

来自:Jina AI 精准的图像描述不仅可以让人们更容易理解图像背后的故事和信息,还可以让图像更易于被检索和识别。然而,对于那些复杂的图像来说,写出既准确又详细的描述实在是件非常困难的事情。 图像描述算法的演变 所谓 Image Cap…

如何选择国际通知短信服务商?

企业在开拓海外市场的过程中,往往需要用到国际短信接口,帮助企业实现用户注册、订单通知、快递通知、营销推广等功能。 那么如何选择国际短信服务商?接下来互亿无线小编整理了相关信息,为大家做个详细介绍: 一、国际…

国际短信发送接口

接口地址 http://intlapi.1cloudsp.com/intl/api/v2/send 用户通过HTTP(或HTTPS)的POST或GET方式提交短信发送请求。编码采用 UTF-8 编码。

ChatGPT还有什么不会?招行信用卡用它写出金融业首篇AIGC

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 内容来自机器之心 比尔盖茨:它(ChatGPT)让我们窥见了未来。 2023 开年至今,AI 赛道最火的莫过于 OpenAI 的 ChatGPT。 推出不到两个月的时间,月活用户…

数字人是AI的UI,ChatGPT助推数字人升级为数智人

以ChatGPT为代表的AIGC智能工具与数字人结合后,将彻底改变人类与计算机的交互方式,使虚拟世界中的数字人对话更真实、更贴近人类,具有记忆和实现连续对话的能力;通过大量人工智能模型训练后数字人将提供更准确、更有价值的信息&am…

ChatGPT-4回答电子电路相关问题,感觉它有思想,有灵魂,一起看看聊天记录

前几天发了一篇文章,讲了我们平常摸电脑或者其它电器设备的时候,会有酥酥麻麻的感觉,这个并不是静电,而是Y电容通过金属壳泄放高频扰动,我们手摸金属壳的时候,就给Y电容提供了一个泄放回路,所以…

虚拟数字人遇上ChatGPT,好看的皮囊和有趣的灵魂?

都说好看的皮囊千篇一律,有趣的灵魂万里挑一,博雅仔不禁好奇,到底有没有皮囊又好看,灵魂又有趣的人呢?二者能否得兼?答案是当然可以啊。 虽然在现实生活中,遇到这样的人需要静待缘分的安排&…

GPT-4的20个起飞的姿势

全文目录: 1.聊天 GPT SaaS 业务 2. API 即服务 3.AI自动优酷频道 4. 社交媒体营销机构 5. 使用聊天GPT创建课程 6.开始按需打印商店 7.AI 个人助理 8.AI 自媒体助手 9. 客户服务聊天机器人 10. 财务规划应用程序 11. 健康与保健应用程序 12. 娱乐应用 …