企业认证与安全体系(四):企业登录认证流程全解析——JWT、Redis、Spring Security 如何协同工作?

上一篇我们讲了:

《企业认证与安全体系(三):一篇讲透 JWT 原理与企业级实践》

我们已经知道:

  • JWT 是什么
  • JWT 为什么无法篡改
  • JWT 为什么无法主动失效
  • Redis 为什么会出现在认证体系里
  • 企业为什么采用双 Token 机制

但问题来了:

在真实企业项目中:

复制代码
JWT
Redis
Spring Security
Gateway

这些东西到底是什么关系?

很多开发学完之后:

会一种感觉:

复制代码
JWT会了

Redis也懂了

Spring Security也听过

但是不知道它们到底怎么串起来

今天我们就从工程视角,

通过一次真实登录流程,

彻底讲透:

企业认证体系全景图


一、先看整体架构

我们先不看代码。

先建立全局认知。

一个典型企业项目:

复制代码
Android / iOS / Web
          │
          ▼
       Gateway
          │
          ▼
 Spring Security
          │
          ▼
         JWT
          │
          ▼
        Redis
          │
          ▼
      Controller
          │
          ▼
       Service

很多人第一次看 会觉得:

复制代码
怎么这么多组件?

实际上:它们职责完全不同。


二、每个组件负责什么

先记住一句话:

不同组件解决不同问题


JWT负责:

复制代码
我是谁

Redis负责:

复制代码
我还能不能访问

Spring Security负责:

复制代码
认证框架

Gateway负责:

复制代码
统一入口

简单理解:

组件 职责
JWT 身份认证
Redis 会话控制
Spring Security 认证框架
Gateway 流量入口

三、一次登录到底发生了什么

用户 输入:

复制代码
账号
密码

点击登录。


流程:

复制代码
客户端
    │
    ▼
POST /login
    │
    ▼
Spring Security
    │
    ▼
校验用户名密码
    │
    ▼
生成JWT
    │
    ▼
生成RefreshToken
    │
    ▼
Redis保存RefreshToken
    │
    ▼
返回客户端

这里:

Spring Security负责:

复制代码
账号密码认证

JWT负责:

复制代码
后续接口访问

Redis负责:

复制代码
保存会话

四、登录成功后客户端拿到了什么

通常 服务端返回:

复制代码
{
  "accessToken":"xxxxx",
  "refreshToken":"yyyyy"
}

含义:

AccessToken:

复制代码
访问接口

RefreshToken:

复制代码
刷新AccessToken

有效期通常:

复制代码
AccessToken
30分钟

RefreshToken
7天

五、一次接口请求发生了什么

例如:

获取用户信息:

复制代码
GET /user/info

客户端:

携带:

复制代码
Authorization: Bearer xxxxxx

请求进入:

复制代码
Gateway

然后:

复制代码
Spring Security Filter链

然后:

复制代码
JWT校验

流程:

复制代码
客户端
    │
Bearer Token
    ▼
Gateway
    │
    ▼
JwtFilter
    │
    ▼
解析JWT
    │
    ▼
验证签名
    │
    ▼
检查是否过期

如果失败:

直接:

复制代码
401 Unauthorized

如果成功:进入下一步。


六、SecurityContextHolder 是什么时候出现的

JWT验证成功后:

Spring Security会创建:

复制代码
Authentication

对象。


可以理解成:

复制代码
当前登录用户

例如:

复制代码
userId = 1001

username = admin

role = ADMIN

然后:

放入:

复制代码
SecurityContextHolder

里面。


此时:

系统已经知道:

复制代码
当前请求是谁

了。


所以后续:

Controller:

复制代码
getCurrentUserId()

就能直接拿到:

复制代码
1001

七、Redis 在哪里发挥作用

很多人以为:

JWT验签成功:

就结束了。

实际上:

企业里往往还会:

查 Redis


例如:

JWT:

复制代码
userId = 1001

然后:

检查:

复制代码
login:user:1001

是否存在。


存在:

复制代码
允许访问

不存在:

复制代码
401

为什么?

因为:

JWT 无法主动失效


而 Redis 可以。


所以:

企业真实流程:

复制代码
JWT认证
      +
Redis会话检查

八、一次自动续签发生了什么

假设:

AccessToken:

复制代码
30分钟

到期。


请求接口:

复制代码
401 Unauthorized

客户端发现:

复制代码
AccessToken失效

自动调用:

复制代码
POST /refresh

携带:

复制代码
RefreshToken

服务端:

检查 Redis。


合法:

生成:

复制代码
新AccessToken

返回客户端。


客户端:

重新请求原接口。


整个过程:

复制代码
用户无感知

九、一次强制下线发生了什么

管理员:

点击:

复制代码
踢下线

服务端:

删除:

复制代码
login:user:1001

此时:

用户手机里的JWT:

其实还在。


但是:

下次请求:

复制代码
JWT验签成功

之后:

Redis检查失败。


直接:

复制代码
401

实现:

强制下线


十、为什么企业喜欢这种方案

因为:

JWT:

解决:

复制代码
身份认证

Redis:

解决:

复制代码
会话管理

Spring Security:

解决:

复制代码
认证流程管理

Gateway:

解决:

复制代码
统一入口

职责清晰。

扩展方便。


十一、真实企业认证链路全景图

到这里,

你应该已经能把整个认证体系串起来了。

复制代码
用户登录
    │
    ▼
Spring Security认证账号密码
    │
    ▼
生成JWT
    │
    ▼
生成RefreshToken
    │
    ▼
Redis保存RefreshToken
    │
    ▼
返回客户端

后续访问:

复制代码
客户端
    │
Bearer Token
    ▼
Gateway
    │
    ▼
JwtFilter
    │
    ▼
JWT验证
    │
    ▼
Redis检查
    │
    ▼
SecurityContextHolder
    │
    ▼
Controller
    │
    ▼
Service

这就是:

企业认证体系最经典的架构


最终核心理解

很多开发学习认证体系时:

容易把:

复制代码
JWT
Redis
Spring Security
Gateway

看成四个独立知识点。

实际上:

它们是:

一条完整链路

JWT负责:

复制代码
身份认证

Redis负责:

复制代码
会话生命周期管理

Spring Security负责:

复制代码
认证框架

Gateway负责:

复制代码
统一鉴权入口

它们共同组成:

企业级认证与授权体系


下篇预告

下一篇我们继续:

《企业认证与安全体系(五):Spring Security + JWT + Redis 企业级认证实战》

真正进入代码层面:

  • SecurityConfig 如何配置
  • JwtAuthenticationFilter 如何实现
  • OncePerRequestFilter 为什么必须用
  • 登录接口如何生成 JWT
  • Redis 如何管理 RefreshToken
  • 自动续签如何实现
  • 强制下线如何实现

彻底实现一套:

企业级登录认证系统。

相关推荐
yio_yin5 小时前
SpringSecurity认证和权限
spring security
都叫我大帅哥13 小时前
Spring Data JPA 查询之道:方法命名与示例查询完全指南
java·后端·spring
奇迹暖暖暖14 小时前
企业邮箱选型与部署:公司用什么邮箱比较好、如何注册企业邮箱
安全·架构·邮箱
重庆小透明15 小时前
带你从不同视角了解三大MQ
java·学习·spring·kafka·rabbitmq·rocketmq
Privasa-隐私实验室15 小时前
全程无死角安全测评|从开机上锁、硬核加密到彻底销毁,Privasa 全生命周期隐私防护详解
笔记·安全·本地存储·隐私安全·aes-256
toooooop815 小时前
如何用 ss + ps 精准定位本机 Redis 的“隐形”消费者?
linux·数据库·redis·缓存
上海云盾-小余18 小时前
CC 高频请求 + DDoS 流量攻击实战防御:全链路 WAF 流量清洗部署完整流程
网络·爬虫·安全·小程序·ddos
论迹复利19 小时前
平台安全架构(PSA)概述——从方法论到工程实践
嵌入式硬件·安全·psa
江湖有缘19 小时前
保姆级教程:使用Docker一键部署Hoodik轻量级安全云盘
安全·docker·容器
千里念行客24020 小时前
迈向晚期TNBC一线治疗!芦康沙妥珠单抗(sac-TMT)第六项NDA获受理
科技·安全·健康医疗