首页 > 其他分享 >Spring Cloud Gateway实现鉴权认证流程总结(一)

Spring Cloud Gateway实现鉴权认证流程总结(一)

时间:2023-11-14 18:00:53浏览次数:41  
标签:网关 请求 Spring Gateway 令牌 认证 access token 鉴权

认证、授权、凭证
1.1 认证(Authentication)
认证表示你是谁。系统如何正确分辨出操作用户的真实身份,比如通过输入用户名和密码来辨别身份。
1.2 授权(Authorization)
授权表示你能干什么。系统如何控制一个用户能看到哪些数据和操作哪些功能,也就是具有哪些权限。
1.3 凭证(Credential)
表示你如何证明你的身份。系统如何保证它与用户之间的承诺是双方当时真实意图的体现,是准确、完整和不可抵赖的。接下来我们看下使用 JWT 作为凭证完成认证的原理。认证的原理,在如下的认证时序图中,有以下几种角色:

  • 客户端:表示 APP 端或 PC 端的前端页面。
  • 网关:表示 Spring Cloud Gateway 网关服务,这里。
  • 认证服务:用来接收客户的登录请求、登出请求、刷新令牌的操作。
  • 业务服务:和系统业务相关的微服务。

认证和校验身份的流程如下所示:

认证和校验身份流程
① 用户登录:客户端在登录页面输入用户名和密码,提交表单,调用登录接口。
② 转发请求:这里会先将登录请求发送到网关服务 passjava-gateway,网关对于登录请求会直接转发到认证服务 passjava-auth。(网关对登录请求不做 token 校验,这个可以配置不校验哪些请求 URL)
③ 认证:认证服务会将请求参数中的用户名+密码和数据库中的用户进行比对,如果完全匹配,则认证通过。
④ 生成令牌:生成两个令牌:access_token 和 refresh_token(刷新令牌),刷新令牌我们后面再说,这里其实也可以只用生成一个令牌 access_token。令牌里面会包含用户的身份信息,如果要做权限管控,还需要在 token 里面包含用户的权限信息,权限这一块不在本篇展开,会放到下一篇中进行讲解。
⑤ 客户端缓存 token:客户端拿到两个 token 缓存到 cookie 中或者 LocalStorage 中。
⑥ 携带 token 发起请求:客户端下次想调用业务服务时,将 access_token 放到请求的 header 中。
⑦ 网关校验 token:请求还是先到网关服务,然后由它校验 access_token 是否合法。如果 access_token 未过期,且能正确解析出来,就说明是合法的 access_token。
⑧ 携带用户身份信息转发请求:网关将 access_token 中携带的用户的 user_id 放到请求的 header 中,转发给真正的业务服务。
⑨ 处理业务逻辑:业务服务从 header 中拿到用户的 user_id,然后处理业务逻辑,处理完后将结果原路返回给客户端。

参考文档:https://zhuanlan.zhihu.com/p/553821824?utm_id=0

 

标签:网关,请求,Spring,Gateway,令牌,认证,access,token,鉴权
From: https://www.cnblogs.com/jelly12345/p/17832198.html

相关文章

  • Spring Cloud Gateway实现鉴权认证流程总结(二)
    微服务认证方案微服务认证方案目前有很多种,每个企业也是大不相同,但是总体分为两类,如下:网关只负责转发请求,认证鉴权交给每个微服务商控制统一在网关层面认证鉴权,微服务只负责业务你们公司目前用的是哪种方案?先来说说第一种方案,有着很大的弊端,如下:代码耦合严重,每个微服务都要......
  • Spring Cloud 入门总结
    首先我给大家看一张图,如果大家对这张图有些地方不太理解的话,我希望你们看完我这篇文章会恍然大悟。总体架构什么是Springcloud构建分布式系统不需要复杂和容易出错。SpringCloud为最常见的分布式系统模式提供了一种简单且易于接受的编程模型,帮助开发人员构建有弹性的、......
  • Springboot3核心特性
    一、简介1.前置知识Java17Spring、SpringMVC、MyBatisMaven、IDEA2.环境要求环境&工具版本(orlater)SpringBoot3.0.5+IDEA2021.2.1+Java17+Maven3.5+Tomcat10.0+Servlet5.0+GraalVMCommunity22.3+......
  • 【springboot项目运行报错】亲测有效 Parameter 0 of constructor in xxx.xxx.Control
    Parameter0ofconstructorinme.zhengjie.modules.system.rest.DictDetailControllerrequiredabeanoftype'me.zhengjie.modules.system.service.DictDetailService'thatcouldnotbefound.1.点击界面左侧的maven管理,再点击root下的生命周期,点击clean(也可以直接控制台......
  • 正确配置 Spring Boot Security 跨域请求(CORS)
    如果SpringBoot项目引入SpringSecurity组件,单独声明CorsConfigurationSourceBean并不起作用,这是由于CORS预检请求不含SessionID而请求首先被SpringSecurity处理并拒绝导致的。因此,必须明确地配置SpringSecurity跨域参数以便正常处理跨域请求,下面是一个配置示例......
  • springboot dto,entity中过滤字符串传入内容的空格
    @Excel(name="商品编号")privateStringproductCode;publicStringgetProductCode(){//过滤空格;returnproductCode.trim();}......
  • springcloud教程 -- 快速搭建入门级demo
    废话不多讲,跟紧我,开启你的SpringCloud初体验 首先回顾微服务的基本组成: [图片here] 生产者:提供服务消费者:消费服务服务注册/发现中心:服务注册,发现,监控所以,首先明白springcloud微服务的架构基础:生产者(client),消费者(client),服务注册/发现中心(server) ****************......
  • springboot+springsecurity+layui+cherryMd博客系统
    演示地址:http://175.24.198.63:9090/front/indexPS:演示环境的服务器配置很低,带宽很小,若打开速度较慢,稍微等等哦~现在动不动就是前后端分离,其实访问量不大博客这种项目,没有必要为了分离而分离。SpringBoot+LayUI:快速开发:LayUI是一个简单的UI框架,它提供了易于使用的组......
  • springboot 3 知识点总结
    一、springboot相关1.类中添加@RestController、方法中添加@GetMapping注解可实现web的路由和数据返回;这两个注解不是springboot的是注解,是springMVC的注解2.在controller的方法中的参数中添加@RequestPara(value="name",defaultValue="word")可以实现浏览器get参数的接收......
  • SpringBoot系列之集成Redission入门与实践教程
    Redisson是一款基于java开发的开源项目,提供了很多企业级实践,比如分布式锁、消息队列、异步执行等功能。本文基于Springboot2版本集成redisson-spring-boot-starter实现redisson的基本应用软件环境:JDK1.8SpringBoot2.2.1Maven3.2+Mysql8.0.26redisson-spring-boot-starter3.15.......