Session Cookie Jwt Token常见web授权

2024-08-25 20:20

本文主要是介绍Session Cookie Jwt Token常见web授权,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于分布式系统、同公司内、同一个 redis 作为存储,这个是目前主要的用法,去找开源框架都是这个逻辑;对外开放等使用参考 OAuth 2.0

能够标识出用户是谁,安全性相对高一些,就是好的方案。

Cookie

Set 和 Get:

  • 服务端控制 Set: 服务器可以通过 HTTP 响应头中的 Set-Cookie 字段来设置 Cookie。如果浏览器没有找到相应的 Cookie,服务器通常会设置一个默认的 Cookie。——通过服务端渲染,返回给前端的代码也可以拼接上前端主动setCookie也行
  • 浏览器处理: 浏览器接收到 Set-Cookie 后会自动存储和管理这些 Cookie。当浏览器再次向同一服务器发送请求时,它会自动将所有相关 Cookie 附加到请求头中。

Session

会话 ID:

  • 服务器为每个用户创建一个唯一的会话 ID,并将其存储在服务器端(如redis、Db等)。
  • 会话 ID 通常会被包装在一个名为 sessionid 的 Cookie 中,这样浏览器在每次请求时都会自动携带这个 ID。
  • 服务器通过会话 ID 来识别用户,并获取与该用户相关的会话数据。

JWT(JSON Web Token)

用户信息加密字符串:

  • JWT 是一种用于在网络应用间传递声明的开放标准(RFC 7519)。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。
  • JWT 的载荷部分可以包含用户的身份信息和其他相关数据。这些数据在服务器端进行加密处理后生成 JWT 字符串。
  • 由于 JWT 是自包含的,因此可以减少对数据库的查询。但是,JWT 不易于实现下线处理,因为一旦签发,它将在其过期时间之前一直有效。为了解决这个问题,通常会在服务器端(如 Redis)存储一份 JWT 的副本,并设置相应的过期时间。当需要强制用户下线时,只需删除 Redis 中的对应记录即可。

Token(跟 SessionId 差不多)

服务端生成和 Redis 存储:

  • Token 是一种用于身份验证的字符串,通常由服务器生成并返回给客户端。
  • 与 JWT 不同,Token 可以是任何格式和长度的字符串,只要它能够唯一标识用户即可。
  • 为了提高安全性和可扩展性,可以将 Token 存储在 Redis 等内存数据库中。这样,当用户登录或刷新 Token 时,服务器只需更新 Redis 中的记录即可。
  • 在请求处理过程中,服务器可以通过检查 Redis 中是否存在对应的 Token 来验证用户的身份。同时,Redis 的高性能和分布式特性也使得 Token 验证过程更加高效和可靠。

总结

  1. Session 和 Cookie 在分布式环境下的处理
    • 传统的单体应用中,session 数据通常存储在服务器端。但在分布式系统中,为了支持水平扩展和数据共享,可以将 session 数据存储在像 Redis 这样的集中式存储中。
  2. JWT 与 Redis 的结合使用
    • JWT(JSON Web Tokens)本身包含所有认证信息,不需要服务器查询数据库验证,但其过期管理和注销机制较弱。为了解决这些问题,通常在 Redis 中货数据存储 JWT 的黑名单来管理过期时间和下线操作。——这就很没意思(快和token一个月i死了)
  3. Token 的管理和免登录功能
    • Token后端一般存储在 Redis 中进行统一管理。对于需要实现长时间免登录的功能,可以通过设置一个长期有效的 cookie(例如30天有效期),token 脱离了 cookie 的安全校验,跨域更加方便

jwt web 场景下意义就不是很大了,选择用 token 有些情况下也是会和 cookie 一起搭配使用了;

这篇关于Session Cookie Jwt Token常见web授权的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106558

相关文章

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

MySQL ORDER BY 语句常见用法、示例详解

《MySQLORDERBY语句常见用法、示例详解》ORDERBY是结构化查询语言(SQL)中的关键字,隶属于SELECT语句的子句结构,用于对查询结果集按指定列进行排序,本文给大家介绍MySQL... 目录mysql ORDER BY 语句详细说明1.基本语法2.排序方向详解3.多列排序4.常见用法示例5.

springboot项目中集成shiro+jwt完整实例代码

《springboot项目中集成shiro+jwt完整实例代码》本文详细介绍如何在项目中集成Shiro和JWT,实现用户登录校验、token携带及接口权限管理,涉及自定义Realm、ModularRe... 目录简介目的需要的jar集成过程1.配置shiro2.创建自定义Realm2.1 LoginReal

SpringBoot集成Shiro+JWT(Hutool)完整代码示例

《SpringBoot集成Shiro+JWT(Hutool)完整代码示例》ApacheShiro是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,在现代应用开发中,Shiro因... 目录一、背景介绍1.1 为什么使用Shiro?1.2 为什么需要双Token?二、技术栈组成三、环境