首页 > 其他分享 >SpringCloud系列八之微服务网关安全认证-JWT篇

SpringCloud系列八之微服务网关安全认证-JWT篇

时间:2023-11-14 18:11:37浏览次数:49  
标签:网关 服务 SpringCloud JWT 用户 认证 令牌

Gateway-JWT认证鉴权流程
一、网关认证件鉴权流程
目前主流的结合微服务网关及JWT令牌开发用户认证及服务访问鉴权的流程如下:

  • 用户认证流程:用户向网关发送登录认证请求,网关将请求转发给认证服务。认证服务校验用户登录信息(用户密码、短信及图片验证码)等信息之后,如果校验成功颁发一个token令牌给该用户(这个令牌可以是JWT令牌)
  • 网关级别访问鉴权:当用户访问系统内的其他业务服务接口时,需要携带登录认证的时候颁发的JWT token。网关验证JWT token的合法性,如果token不合法,则返回接口访问权限不足。如果token合法,则将请求按照网关的路由规则转发至相应的服务。
  • 服务级别访问鉴权:网关级别的访问鉴权只是鉴别了JWT令牌的合法性,初步认定你是这个系统的用户,但是作为系统的用户并不意味着你可以访问所有的服务接口。通常基于用户的角色分类有更严格的访问权限划分。
  • 令牌的颁发和校验需要基于同一个密钥,也就是说JWT 令牌的签名和解签必须有同一个密钥。谜面是"天王盖地虎",谜底必须是“宝塔镇河妖”,如果密钥对不上则令牌的校验失败。

所以通常网关层面除了转发请求之外需要做两件事:一是校验JWT令牌的合法性,二是从JWT令牌中解析出用户身份,并在转发请求时携带用户身份信息。这样系统内的其他业务服务在收到转发请求的时候,根据用户的身份信息判断决定该用户可以访问哪些接口。
二、流程优化方案
从上面的流程中我们可以看出

  • 令牌的颁发是由认证服务完成的
  • 令牌的校验是由网关完成的

也就是说这个JWT密钥相关的基础配置必须得在“认证服务”和“网关服务”上都配置一份,这样的配置分散不利于维护和密钥管理。所以我们优化一下流程:在gateway服务网关的服务上开发登录认证功能。优化后的流程如下:

 

三、学习本章内容需要具备的基础知识
从上面的流程看出,实现JWT认证鉴权流程其实并不是很复杂,但是要想真正的做好服务接口的鉴权流程,其涉及的基础知识还是非常多的。
3.1.在网关上实现登录认证
因为gateway网关的基础框架是Spring WebFlux,不是Spring MVC。所以你需要有一定的WebFlux开发知识。
Spring WebFlux对于关系型数据库的响应式编程目前的支持非常有限。笔者多次试验mybatis目前肯定是不能用了,JPA兼容性比较好。所以你要有JPA的知识。(WebFlux不支持MysQL数据库访问的响应式编程,不等于它不支持MySQL,还是可以使用MYSQL数据库的)
3.2. Spring Security基础
系统内的其他业务服务在收到转发请求的时候,根据用户的身份信息判断决定该用户可以访问哪些接口。该如何实现?你要有Spring Security的基础知识及RBAC权限管理模型相关的基础知识.

用户->+网关: 登录请求
网关-->-用户: return token
用户->+网关: 携带token访问业务
网关->网关: 校验token的合法性
网关->+其他服务: 携带用户身份信息转发请求
其他服务-->-网关: return data
网关-->-用户: return data

参考文档:https://cloud.tencent.com/developer/article/1999105

 

标签:网关,服务,SpringCloud,JWT,用户,认证,令牌
From: https://www.cnblogs.com/jelly12345/p/17832231.html

相关文章

  • springcloud教程 -- 快速搭建入门级demo
    废话不多讲,跟紧我,开启你的SpringCloud初体验 首先回顾微服务的基本组成: [图片here] 生产者:提供服务消费者:消费服务服务注册/发现中心:服务注册,发现,监控所以,首先明白springcloud微服务的架构基础:生产者(client),消费者(client),服务注册/发现中心(server) ****************......
  • 使用JWT、拦截器与ThreadLocal实现在任意位置获取Token中的信息,并结合自定义注解实现
    1.简介1.1JWTJWT,即JSONWebToken,是一种用于在网络上传递声明的开放标准(RFC7519)。JWT可以在用户和服务器之间传递安全可靠的信息,通常用于身份验证和信息交换。声明(Claims):JWT包含一组称为声明的信息,声明描述了一些数据。有三种类型的声明:注册声明(RegisteredClaims):这是......
  • JWT浅了解
    JWT通过数字签名的方式(让我想起了软考),以json对象为载体,在不同的服务终端之间安全传输信息是一种授权认证生成token的原理:通过header的加密方式,对payload进行加密。然后把header和payload再次加密生成signature贴一下我的settokenreturnJWT.create().withAudience(userId)//......
  • SSH高级应用之远程端口转发并实现网关功能
    端口转发实现逻辑我们直接来看这图好,那么现在呢?你假设你是出差在外的用户,比方说有一个笔记本用户出差了。明白了好。现在是这样的,这个服务器呢?是在你企业内部的。那么,企业内部要想。让互联网的用户想访问,通常来讲是访问不了的,因为什么有防火墙?他会阻止你访问企业内部的服务器,所以......
  • SpringCloud全链路灰色发布具体实现!
    灰度发布(GrayRelease,也称为灰度发布或金丝雀发布)是指在软件或服务发布过程中,将新版本的功能或服务以较小的比例引入到生产环境中,仅向部分用户或节点提供新功能的一种发布策略。在传统的全量发布中,新版本的功能会一次性全部部署到所有的用户或节点上。然而,这种方式潜在的风险是,如......
  • 天穹-gateway网关系列1:Tesla网关整体介绍
    一、背景在微服务时代,服务拆分粒度越来越细,每个微服务各自负责自己的核心功能并对外提供一系列的api接口。但随着业务的拓展,接口越来越多,也就诞生了一些问题。可以在一个地方去统一的管理这些接口吗?在涉及到鉴权这个普遍的问题时,难道需要每个微服务都实现一次吗?每个微服务都有自己......
  • 天穹-gateway网关系列1:Tesla网关整体介绍
    一、背景在微服务时代,服务拆分粒度越来越细,每个微服务各自负责自己的核心功能并对外提供一系列的api接口。但随着业务的拓展,接口越来越多,也就诞生了一些问题。可以在一个地方去统一的管理这些接口吗?在涉及到鉴权这个普遍的问题时,难道需要每个微服务都实现一次吗?每个微服务都有自己......
  • 网关&路由
    (1)统一网关Gateway  网关实现技术 总结: (2)搭建网关服务      实现原理  总结 (3)路由断言工厂RoutePredicateFactory 总结......
  • identityserver,OAuth2.0,JWT之间的关系
    OAuth2.0是一种授权框架,用于应用程序之间安全的共享用户资源,它允许用户授权第三方应用程序访问他们的资源,列如照片,视频,联系人列表等,而不必将用户名和密码提供给第三方应用程序,OAuth2.0通过令牌来代表用户授权,这些令牌可以被第三方应用程序用于访问用户资源,而不必知道用户的凭据。O......
  • 接口开放太麻烦?试试阿里云API网关吧
    前言我在多方合作时,系统间的交互是怎么做的?这篇文章中写过一些多方合作时接口的调用规则和例子,然而,接口开放所涉及的安全、权限、监控、流量控制等问题,可不是简简单单就可以解决的,这一般需要专业的开放平台来支撑。但为了开放几个接口就要做一个开放平台,实在是不合算。为此阿里云为......