当前位置: 首页 > news >正文

微服务中token鉴权设计的4种方式

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鉴权方案时,可以根据业务需求和安全要求选择合适的鉴权方案。同时,鉴权方案的设计和实施需要考虑系统的可扩展性、可维护性和安全性。

「JWT(JSON Web Tokens)鉴权」:

优点:无状态性使得服务端不需要保存会话状态,易于传输且结构紧凑,安全性高。
适用场景:适用于需要快速验证用户身份且不需要频繁更新用户权限的场景。

「OAuth 2.0鉴权」:

优点:安全性高,用户不需要将密码暴露给第三方应用,支持多种授权模式,广泛支持。
适用场景:适用于需要第三方应用访问用户存储在服务提供者上的信息的场景。

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

优点:集中管理简化了认证和授权逻辑的管理,提高了系统的安全性,可扩展性强。
适用场景:适用于微服务架构中,作为统一入口进行集中认证和授权的场景。

「微服务内部调用鉴权」:

优点:实现简单,可以根据实际需求选择透传Token、基于角色的访问控制或无鉴权等方式。
适用场景:适用于微服务之间的内部调用,需要根据实际需求选择合适的鉴权方式。

http://www.xdnf.cn/news/1130221.html

相关文章:

  • STM32 | 定时器 PWM 呼吸灯
  • Python 程序设计讲义(2):Python 概述
  • kube-proxy 中 IPVS 与 iptables
  • SQL学习记录01
  • 【PTA数据结构 | C语言版】根据层序序列重构二叉树
  • day053-初识docker与基础命令
  • 【人工智能99问】神经网络的工作原理是什么?(4/99)
  • 深入掌握Python正则表达式:re库全面指南与实战应用
  • 如何卸载SQLServer
  • MybatisPlus由浅入深
  • 小型客厅如何装修设计?
  • 读取ubuntu的磁盘分区表与超级块
  • Python初学者笔记第十四期 -- (自定义模块与包)
  • 【删库跑路】一次删除pip的所有第三方库
  • 【PTA数据结构 | C语言版】根据前序序列重构二叉树
  • 【Linux手册】重定向是如何实现的?Linux下为什么一切皆文件?
  • 20250715给荣品RD-RK3588开发板刷Android14时打开USB鼠标
  • Dify的默认端口怎么修改
  • Java 集合 示例
  • 应用部署作业-02-流程
  • Excel制作玫瑰图
  • 20250715_Sneak_neuro 靶机复盘
  • 使用JS编写用户信息采集表单
  • 基于conda包的环境创建、激活、管理与删除
  • C++-linux系统编程 8.进程(二)exec函数族详解
  • 3.2数据库-关系代数-函数依赖-范式
  • IDEA中删除多余的jdk选项 【IDEA2024版】
  • Linux-【单体架构/分布式架构】
  • 李宏毅《生成式人工智能导论》 | 第9讲 AI Agent
  • AI问答-Token:在人工智能领域,Token 是模型处理文本的核心单元 / 最小可处理片段