科普文:『 码到三十五 』Java微服务中Token鉴权设计的4种方案

吐槽`~~~~~~~

Java微服务中Token鉴权设计的几种方案:

1. JWT鉴权

「概述」:JWT是一种用于双方之间安全传输信息的简洁的、URL安全的令牌标准。它基于JSON格式,包含三个部分:头部(Header)、负载(Payload)和签名(Signature)。JWT常用于身份验证和信息交换,特别适用于分布式系统和微服务架构。

图片

「实现步骤」

  1. 「用户登录」

    • 用户提交用户名和密码到认证服务。

    • 认证服务验证用户名和密码的正确性。

    • 如果验证通过,生成JWT,其中包含用户身份信息、权限信息和过期时间等。

    • 将JWT返回给用户。

  2. 「存储JWT」

    • 客户端(如浏览器、移动应用)将JWT存储在本地(如localStorage、sessionStorage、SharedPreferences)。

  3. 「请求携带JWT」

    • 客户端在后续请求中,通过HTTP头部(如Authorization: Bearer {Token})携带JWT。

  4. 「服务端验证JWT」

    • 服务端接收到请求后,从HTTP头部提取JWT。

    • 使用与生成JWT时相同的密钥和算法验证JWT的签名。

    • 如果JWT有效,根据JWT中的信息执行相应的业务逻辑。

「优点」

  • 「无状态性」:服务端不需要保存会话状态,所有验证信息都包含在JWT中。

  • 「易于传输」:JWT结构紧凑,可以直接嵌入HTTP头部。

  • 「安全性」:JWT可以使用HMAC或RSA算法进行签名,确保信息不被篡改。

2. OAuth 2.0鉴权

「概述」:OAuth 2.0是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而无需将用户名和密码提供给第三方应用。OAuth 2.0提供了授权令牌(Access Token)和刷新令牌(Refresh Token)两种类型的令牌。

图片

「实现步骤」

  1. 「授权服务器」

    • 实现OAuth 2.0授权服务器,处理用户授权和令牌发放。

    • 用户通过授权服务器进行授权,授权服务器生成Access Token和(可选的)Refresh Token,并返回给客户端。

  2. 「资源服务器」

    • 保护需要鉴权的资源,通过验证Access Token来授权访问。

  3. 「客户端」

    • 引导用户到授权服务器进行授权。

    • 获取Access Token后,使用Access Token访问资源服务器。

    • 如果Access Token过期,可以使用Refresh Token向授权服务器请求新的Access Token。

「优点」

  • 「安全性高」:用户不需要将密码直接暴露给第三方应用。

  • 「灵活性」:支持多种授权模式,如授权码模式、密码模式、客户端凭据模式等。

  • 「广泛支持」:许多主流平台和框架都支持OAuth 2.0。

3. 统一授权中心(API Gateway)

「概述」:在微服务架构中,使用API Gateway作为统一入口,进行集中认证和授权。API Gateway负责接收外部请求,进行认证和授权后,将请求转发到相应的微服务实例。

图片

图片

「实现步骤」

  1. 「部署API Gateway」

    • 在微服务集群前端部署API Gateway。

    • 配置API Gateway以识别不同的微服务路由。

  2. 「认证和授权」

    • API Gateway接收外部请求后,首先进行认证(如验证JWT或OAuth Token)。

    • 根据认证结果进行授权,检查用户是否有权限访问请求的资源。

  3. 「转发请求」

    • 如果认证和授权都通过,API Gateway将请求转发到相应的微服务实例。

    • 微服务实例处理请求后,将响应返回给API Gateway。

    • API Gateway将响应返回给客户端。

「优点」

  • 「集中管理」:简化了认证和授权逻辑的管理,降低了维护成本。

  • 「安全性高」:所有外部请求都通过API Gateway进行认证和授权,提高了系统的安全性。

  • 「可扩展性」:API Gateway可以作为扩展点,支持更多的认证和授权机制。

4. 微服务内部调用鉴权

对于微服务之间的内部调用,鉴权方案通常比外部调用简单,但也需要考虑安全性和权限控制。

「方案」

  1. 「Token透传」

    • 在微服务内部调用时,将Token作为请求参数或头部进行透传。

    • 接收方微服务验证Token的有效性,并根据Token中的权限信息进行授权。

      图片

  2. 「基于角色的访问控制(RBAC)」

    • 在微服务内部实现RBAC机制,根据调用方的角色进行授权。

    • 角色信息可以通过服务注册中心、配置中心或专门的权限服务进行共享。

  3. 「无鉴权」

    • 对于完全信任的内部调用,可以不进行鉴权。

    • 但这种方式需要确保微服务之间的调用是安全的,避免被恶意利用。

5. 鉴权方案的选择

在设计和实施Java微服务架构中的Token鉴权方案时,可以根据业务需求和安全要求选择合适的鉴权方案。同时,鉴权方案的设计和实施需要考虑系统的可扩展性、可维护性和安全性。

  1. 「JWT(JSON Web Tokens)鉴权」

    • 优点:无状态性使得服务端不需要保存会话状态,易于传输且结构紧凑,安全性高。

    • 适用场景:适用于需要快速验证用户身份且不需要频繁更新用户权限的场景。

  2. 「OAuth 2.0鉴权」

    • 优点:安全性高,用户不需要将密码暴露给第三方应用,支持多种授权模式,广泛支持。

    • 适用场景:适用于需要第三方应用访问用户存储在服务提供者上的信息的场景。

  3. 「统一授权中心(API Gateway)」

    • 优点:集中管理简化了认证和授权逻辑的管理,提高了系统的安全性,可扩展性强。

    • 适用场景:适用于微服务架构中,作为统一入口进行集中认证和授权的场景。

  4. 「微服务内部调用鉴权」

    • 优点:实现简单,可以根据实际需求选择透传Token、基于角色的访问控制或无鉴权等方式。

    • 适用场景:适用于微服务之间的内部调用,需要根据实际需求选择合适的鉴权方式。

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

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

相关文章

如何将WordPress文章中的外链图片批量导入到本地

在使用采集软件进行内容创作时,很多文章中的图片都是远程链接,这不仅会导致前端加载速度慢,还会在微信小程序和抖音小程序中添加各种域名,造成管理上的麻烦。特别是遇到没有备案的外链,更是让人头疼。因此,…

Monte Carlo Tree Search Boosts Reasoning via Iterative Preference Learning

Monte Carlo Tree Search Boosts Reasoning via Iterative Preference Learning Github:https://github.com/YuxiXie/MCTS-DPO 一、动机 大语言模型在偏好对齐环节可以提高模型的性能。目前有诸多工作尝试将偏好对齐通过迭代的形式进行改进: It involves a cycle …

装修行业办公家具销售公司网站带模版 附带完整的源代码包以及搭建部署教程

系统概述 这款网站源码系统是针对装修行业办公家具销售公司的特点定制的,它融合了现代化的设计理念和先进的技术架构,旨在为用户提供极佳的浏览和购物体验。系统采用了响应式设计,能够自适应不同设备的屏幕尺寸,确保用户在手机、…

【ai】 2005年 rule based expert system学习笔记1

PPT 是2005年的? Negnevitsky, Pearson Education 使用两种推理引擎的选择 backward chaining(逆向链接)推理过程 backward chaining(逆向链接)推理过程的GPT解释 这幅图展示了一个基于规则的专家系统如何通过backward chaining(逆向链接)推理过程来达到最终的推理目标…

大数据-55 Kafka sh脚本使用 与 JavaAPI使用 topics.sh producer.sh consumer.sh kafka-clients

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

禁毒教育展厅应如何创新展示方式,提升教育意义?

为了深刻揭示毒品的危害,促进禁毒知识的广泛传播,并显著提升公众的防范意识,禁毒教育展厅的推广举措正紧锣密鼓地展开。在这一关键进程中,展厅的空间布局与内容设计的合理性与针对性成为了至关重要的环节。接下来,我们…

angular入门基础教程(二)第一个angular组件

ng中的语法跟vue中是一样的插值语法,其实也是早期vue抄的ng的思路,使用{{variable}}形式,vue借鉴了ng和react,这个我们就不多了。 新建一个子组件 在项目根目录下面,执行 ng g component ./components/UserList这样…

【RL】强化学习入门:从基础到应用

本篇文章是博主强化学习RL领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章强化学习: 强化学习…

JDBC介绍及使用

目录 JDBC概述 JDBC概念 JDBC本质 JDBC好处 JDBC快速入门 JDBC API详解 DriverManager Connection Statement ResultSet PreparedStatement 数据库连接池 数据库连接池简介 数据库连接池实现 Driud使用 JDBC练习 JDBC概述 JDBC概念 JDBC 就是使用Java语言操作…

Docker Compose V2 安装 ClickHouse v20.6.8.5 经验分享

前言 ClickHouse 是一款开源的分布式列式数据库管理系统,专门设计用于高性能的大数据分析和查询。 目前项目中用到的一个场景是将mongo的数据同步到clickhouse,使用clickhouse做报表,后续也将分享同步和使用方案 使用 Docker Compose 部署单机版,小项目和自己测试够用了,生…

海外短剧CPS系统,平台短剧出海推广方案

随着国内短剧市场的蓬勃发展与国际化趋势的加速,海外观众对于高质量、富有创意的短剧内容需求日益增长。在此背景下,搭建一个高效、便捷的海外短剧CPS(Cost Per Sales,按销售分润)分销系统平台,能为内容创作…

实战内测-某内测项目站点FUZZ到Sql注入

0x1 前言 下面给师傅们分享的案例呢是前段时间实战的一个站点,也是我朋友前段时间让我测的一个站点。整体的测试流程也还算ok,然后里面有些细节要是对师傅们有帮助可以收藏下,后面主要是利用FUZZ打了一个sql注入漏洞上去。 0x2 fuzz和sql结…

Halcon Blob分析

斑点分析的思路:在图像中,相关对象的像素可以通过其灰度值来识别。例如下图的组织颗粒。这些颗粒是凉的,而液体是暗的,通过选择明亮像素(阈值),可以很容易地检测到颗粒。在需要应用中,这种简单的暗像素和亮…

HarmonyOS持久化存储数据Preference

Preference首选项 首选项:首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这…

【优秀python web设计】基于Python flask的猫眼电影可视化系统,可视化用echart,前端Layui,数据库用MySQL,包括爬虫

1 绪论 1.1 设计背景及目的 猫眼电影作为国内知名的电影信息网站,拥有海量的电影信息、票房数据和用户评价数据。这些数据对于电影市场的研究和分析具有重要意义。然而,由于数据的复杂性和数据来源的多样性,如何有效地采集、存储和展示这些数…

复现波恩大学的“LiDiff:基于扩散模型实现3D LiDAR场景补全!”(点云补全)项目

本文的主要工作就是复现下述论文中的算法。 该论文全称:Scaling Diffusion Models to Real-World 3D LiDAR Scene Completion 一、准备工作 首先通读readme.md文件的内容,了解所需要的相关依赖和数据等内容。 一定要多读几遍,不要扫一眼就…

[Linux安全运维] LAMP 环境搭建保姆级教学(Apache + MySQL + PHP) ~~

LAMP LAMP 是一种网站技术,可以实现动态的网站页面部署。 1. LAMP概述 1 .1构成 Linux: 简介: Linux 是一种开源的操作系统,以其稳定性和安全性而著称。在 LAMP 堆栈中,它作为服务器操作系统运行。作用: 为应用程序提供一个稳定、安全的运…

【linux】在多核CPU下,好像看到不同进程在不同CPU调度

在2353这行打印的情况来看,操作系统好像给不同的进程分配不同的CPU,从上图来看,同一个进程好像基本使用的相同的CPU: 其实摸索syscall文件系统操作,本意是想找到内核文件系统中文件的创建,写入,…

3DMAX神经网络插件Neuron使用方法详解

3DMAX神经网络插件Neuron使用方法 3DMAX神经网络插件Neuron,从一系列样条曲线创建具有分支结构的几何体。适用于如神经网络、血管、树枝等形状的3D建模。 【适用版本】 3dMax2016及更高(不仅限于此范围) 【安装方法】 Neuron插件无需安装&a…

windows 暂停更新

使用windows 系统的伙伴都深受其扰,动不动就要强制更新,并且无法长时间关闭更新。这里推荐一个工具来禁止更新。越来越多的工程师可能会逐渐放弃windows ,真的太冗杂了,linux 的桌面和命令行越来越好用。 下载地址 https://github.com/WereD…