构建安全 Web 应用:从用户认证与授权到 JWT 原理解析

整合SpringSecurity和JWT实现登录认证和授权 文章目录前言一、SpringSecurity是什么?二、JWT是什么?1. JWT的组成2. JWT实现认证和授权的原理三、整合步骤1. 引入相关依赖2. yml配置中加入jwt配置信息3. 添加JWT token的工具类4. 添加SpringSecurity的配置类5. 添加自定义结果处理类5.1 添加CustomAccessDeniedHandler5.2 添加CustomAuthenticationEntryPoint6. 添加JwtUser类7. 添加过滤器JwtAuthenticationTok 阅读详情

构建安全 Web 应用:从用户认证与授权到 JWT 原理解析

开篇引入

在互联网的世界里,用户身份验证与权限控制是任何 Web 应用的基石。从最早的 Cookie+Session,到如今流行的无状态 Token 机制,背后都源自同一目标:确保每一次请求都真实可信、授权受控。伴随单页应用(SPA)、移动端与微服务架构的普及,传统的 Session 存储与管理方式逐渐暴露出跨域困扰、水平扩展受限等痛点。

JSON Web Token(JWT)以其“无状态”“携带自足”的特性应运而生,正被电商、社交、金融等对安全与性能有着严苛要求的场景广泛采用。本文将带你一探:

  • 用户认证(Authentication)与授权(Authorization)的本质区别
  • 传统 Session 与 JWT 的对比与取舍
  • JWT 在底层如何构建、签名与校验
  • Python 生态中使用 Django REST Framework 与 FastAPI 实践 JWT
  • 刷新令牌、角色管理与安全最佳实践

无论你是刚入门的后端新人,还是负责大规模系统安全的资深工程师,都能在这里找到落地可行的思路与示例。


一、认证 vs 授权:Fundamentals

  • 认证(Authentication)
    确定“是谁在请求”。常见方式包括用户名/密码、OAuth、短信验证码、第三方登录。

  • 授权(Authorization)
    确定该身份“可以做什么”。包括角色(Role-Based Access Control,RBAC)与权限(Permission-Based Access Control,PBAC)等细粒度控制。

二者往往协同:先认证用户身份,再根据角色与权限决定访问资源的许可。


二、Session 机制与 JWT 对比

特性 Session(状态管理) JWT(无状态 Token)
存储位置 服务端(内存、数据库、缓存) 客户端(Cookie、LocalStorage)
可扩展性 需集中存储,多实例需共享或粘性路由 天然无状态,易于水平扩展
跨域支持 跨域 Cookie 与 CSRF 问题需额外处理 支持跨域 CORS,只需在 API 端校验头部
性能 请求需检索存储,I/O 开销 仅需本地解码与签名校验,性能更优
撤销/失效 服务端可直接删除 Session 无状态难以强制实时失效,需黑名单/版本号

三、JWT 工作原理详解

JWT(JSON Web Token)由三部分组成,之间用 . 分隔:

HEADER.PAYLOAD.SIGNATURE

3.1 Header

{
   
   
  "alg": "HS256",   // 签名算法
  "typ": "JWT"      // Token 类型
}
  • Base64URL 编码后形成第一段。

3.2 Payload(Claims)

常见声明字段(Claim):

  • iss:发行者(Issuer)
  • sub:主题(Subject,一般为用户 ID)
  • aud:受众(Audience)
  • exp:过期时间(Expiration Time,Unix 时间戳)
  • iat:签发时间(Issued At)
  • 自定义字段:如 role、permissions
{
   
   
  "sub": "user123",
  "role": "admin",
  "iat": 1628000000,
  "exp": 1628003600
}
  • 同样进行 Base64URL 编码形成第二段。

3.3 Signature

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secretKey
)
  • 将 Header 与 Payload 及服务端密钥(secretKey)通过 HMAC-SHA256 签名后,Base64URL 编码即得第三段。

3.4 验证流程

  1. 客户端每次请求将完整 JWT 附加在 Authorization: Bearer <token> 头中。
  2. 服务端分三步校验:
    1. Base64URL 解码 Header 与 Payload
    2. 校验 exp、nbf 等时间字段
    3. 使用同样的 secretKey 对前两段重新签名,并与第三段对比

成功则合法,否则认为 Token 无效或被篡改。


四、在 Django 中使用 JWT 实践

我们以 Django REST Framework + djangorestframework-simplejwt 为示例,快速搭建一个登录认证与受保护接口。

4.1 安装与配置

pip install djangorestframework djangorestframework-simplejwt

在 settings.py 中:

INSTALLED_APPS = [
    # ...
    "rest_framework",
]

REST_FRAMEWORK = {
   
   
    "DEFAULT_AUTHENTICATION_CLASSES": (
        "rest_framework_simplejwt.authentication.JWTAuthentication",
    ),
}

from datetime import timedelta

SIMPLE_JWT = {
   
   
    "ACCESS_TOKEN_LIFETIME": timedelta(minutes=15
19【安全实战】Flask JWT认证完全指南:构建无懈可击的用户认证系统 本文详细介绍了如何在Flask框架中实现JWT(JSON Web Token)认证,构建安全可靠的用户认证系统。JWT作为一种现代认证机制,适用于前后端分离、微服务和移动应用场景。文章首先解析了JWT的基础原理,包括其结构(头部、载荷、签名)和与传统会话认证的对比。接着,通过Flask-JWT-Extended库的安装与配置,展示了如何在Flask中实现基本的JWT认证流程,包括用户登录、令牌生成和受保护路由的访问控制。此外,文章还探讨了高级JWT认证实现,如刷新令牌机制、自定义声明与负载、以及令牌撤销与黑 阅读详情

相关推荐

Fast API 中的用户认证:深入理解 JWT(JSON Web Tokens)

本文深入探讨了在FastAPI中利用JWT实现安全API认证的方案。文章首先强调了API认证的重要性,对比了基于会话和基于令牌两种认证方式的优缺点。重点剖析了JWT的结构(Header,Payload,Signature)及其无状态认证的工作原理,特别指出JWT虽可验证但未加密的特性,以及安全密钥保护的必要性。随后介绍了使用passlib和bcrypt进行密码哈希存储的方法。最后展示了如何将这些技术整合到FastAPI应用中,通过SQLModel实现用户注册、登录和JWT认证的完整流程。文章为开发者提供了构

m0_53827889的博客 1193

Java使用JWT实现Token认证机制

JWT(JSON Web Token)是一种用于在网络上安全地传输信息的简洁的、URL 安全的表示方法,它定义了一个紧凑且自包含的方式,用于不同实体之间安全地传输信息(JSON格式)。JWT 通常由三部分组成,分别是 Header(头部)、Payload(有效载荷)和 Signature(签名)。JWT是一种简单、安全、便捷的身份验证和授权机制,在现代Web应用程序中得到广泛应用。然而,在使用JWT时也需要注意其安全性问题,并采取相应的措施来确保JWT的安全性和完整性。

pan_junbiao的博客 2727

Spring Security并结合JWT实现用户认证(Authentication) 和用户授权(Authorization)

引言 在Web应用开发中,安全一直是非常重要的一个方面。Spring Security基于Spring 框架,提供了一套Web应用安全性的完整解决方案。 JwT (JSON Web Token) 是当前比较主源的Token令牌生成方案,非常适合作为登录和授权认证的凭证。 这里我们就使用 Spring Security并结合JWT实现用户认证(Authentication) 和用户授权(Authorization) 两个主要部分的安全内容。 一、JWT与Aoth2的区别 在此之前,只是停留在用的阶段,对二者的

永远热泪盈眶 坚持输出 6384

【Actix Web】Rust Web开发JWT认证

在现代 Web 开发中,JWT(JSON Web Token)是一种常用的无状态认证方式。通过 JWT,服务端可以发放加密令牌给客户端,客户端每次请求时携带此令牌,服务器通过验证令牌来识别用户身份,省去了服务器端存储会话信息的负担。 Rust 作为一门性能与安全兼备的系统级编程语言,结合 Actix Web 框架开发高性能 Web 应用,成为后端开发的新趋势。

景天科技苑 1万+

Python Flask的用户认证与授权

在当今的Web应用开发中,用户认证与授权是保障系统安全和数据隐私的重要组成部分。Python Flask作为一个轻量级的Web框架,为开发者提供了灵活的方式来实现这些功能。本文的目的是详细介绍如何在Flask应用中实现用户认证与授权,涵盖从基本概念到实际应用的各个方面,帮助开发者理解和掌握相关技术。

AI Python 编程之道的博客 1150

ubuntu18.04安装R——无法连接上 dl.google.com:80 (6.6.6.6),连接超时&&E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

安装R的时候,sudo apt update 的时候出现错误: 查资料要修改/etc/apt/sources.list.d/google-chrome.list 文件 原来是: deb http://dl.google.com/linux/chrome/deb/ stable main 改为: deb [arch=amd64] http://dl.google.com/linux/chrom...

许希律的博客 4350

MTK MT6833平台屏幕与TP驱动移植实战:从FAE伪代码到内核模块集成

本文详细介绍了在MTK MT6833平台上进行屏幕与TP驱动移植的完整实战流程。文章从解析供应商提供的初始化伪代码入手,逐步拆解了在LK阶段点亮屏幕、在内核层集成Panel驱动以支持休眠唤醒,以及移植并调试sitronix_ts触摸驱动的核心步骤与关键技巧,为嵌入式开发人员提供了从零到一集成新硬件的清晰指南。

rnn9storyteller的博客 441

5分钟搞定!Unity中Matcap玻璃材质快速实现(含免费贴图资源)

本文详细介绍了在Unity中快速实现Matcap玻璃材质的方法,从技术原理到实战操作,包括Shader编写、参数调节和性能优化。通过Matcap技术,开发者可以高效创建逼真玻璃效果,特别适合移动端和快速迭代项目。文章还提供了免费贴图资源和进阶优化技巧,帮助提升视觉效果和运行效率。

a1b2c的博客 219

mmdetection 实战:基于Mask R-CNN与自定义COCO数据集的目标检测全流程解析

本文详细解析了如何使用mmdetection框架和Mask R-CNN模型,基于自定义COCO数据集完成目标检测任务的全流程。内容涵盖环境搭建、数据格式转换、配置文件定制化、模型训练与评估等核心步骤,并提供了针对工业缺陷检测场景的实用调优思路与避坑指南,帮助开发者高效构建高性能检测模型。

weixin_29046611的博客 137

WebUI自动化测试框架搭建(python+pytest+selenium+allure)

将鼠标移动到要定位的元素上面>右键>点击“检查”>在元素代码上右键>复制>复制XPath。

m0_63729339的博客 1281

用 MVC 框架把 ABAP 报表写成可扩展的应用(2)

本文介绍了一个基于MVC架构的SAP报表模板,解决了传统ABAP报表开发中的三个核心痛点: 选择屏幕校验逻辑分散问题 - 通过统一的选择屏幕控制器集中管理校验逻辑 在线与后台输出不一致问题 - 共享同一数据模型,通过不同控制器实现多样化展示 屏幕流转管理混乱问题 - 主控制器统一管理所有屏幕流程和事件 该模板采用分层架构: Model层专注数据获取和业务规则 Controller层管理流程和交互 View层负责展示逻辑 特别适用于需要同时支持交互式ALV展示和后台批处理输出的报表场景,通过标准化的扩展点设计

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 78

Docker Compose 中如何控制启动顺序和关闭顺序

文章目录Docker Compose 中如何控制启动顺序和关闭顺序1、基础的启动顺序控制2、关于启动就绪和启动顺序的问题3、重试机制和重连4、使用包装器脚本5、自己定义包装器脚本 Docker Compose 中如何控制启动顺序和关闭顺序 1、基础的启动顺序控制 你可以使用 depends_on 选项来控制服务器的启动和关闭顺序 depends_on,links,volumes_from,和ne...

简简单单Onlinezuozuo 3121

手把手教你YOLOv8/YOLOv11分割训练自己数据集和推理,并教你使用Labelme工具标注数据(附分割网络结构图)

YOLOv8-seg 和 YOLOv11-seg 都是一种高效实例分割算法,实例分割模型的输出是一组勾勒出图像中每个物体的遮罩或轮廓,以及每个物体的类标签和置信度分数。当你不仅需要知道物体在图像中的位置,还需要知道它们的具体形状时,实例分割就非常有用了,功能非常强大,可以应对各种视觉任务。 YOLOv11-seg 则在 YOLOv8-seg 基础上进一步魔改了模型架构,相对分割速度可能更快,其他指标性能有待测试。实例分割可以用于自动驾驶、医疗图像处理、智能农业监控等领域。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 4475

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 深度剖析中间件:理解原理与实战示例(以 Django 与 Flask 为例)
下一篇: 构建健壮的数据库连接池:高并发 Web 应用的制胜之匙
铭渊老黄
铭渊老黄 新星创作者: Python技术领域 新星创作者: Python技术领域
博客等级 码龄7年 1万+粉丝 2220原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铭渊老黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值