Golang怎么JWT设置过期时间_Golang如何在Claims中配置Token有效期【操作】

JWT过期必须依赖payload中标准exp字段(int64秒级Unix时间戳),由token.Claims.Valid()显式触发校验;推荐用jwt.RegisteredClaims并配置WithClockSkew容错。JWT过期时间必须写在 exp 字段里,不能靠外部缓存或服务端计时Go 的 jwt-go(v3 及以前)或 golang-jwt(v4+)都只认标准 Claims 中的 exp 字段来校验过期。你手动记个时间戳、或者用 Redis 存个"预计过期时间",JWT 库本身不会读它------校验时只看 token payload 里的 exp 值。常见错误是:生成 token 时没设 exp,以为后续用 time.Now().Add(24 * time.Hour) 就够了;或者写了但用了错的字段名,比如 expires_at 或 timeout,结果 token 永远不报过期。exp 必须是 int64 类型的 Unix 时间戳(秒级),不是 time.Time,也不是毫秒用 time.Now().Add(...).Unix(),别用 .UnixMilli()如果用 golang-jwt v4+,推荐直接用 jwt.RegisteredClaims,它内置了 ExpiresAt 字段,类型是 *jwt.NumericDate,需要 wrap 一下:jwt.NewNumericDate(time.Now().Add(24 * time.Hour))用 jwt.RegisteredClaims 而不是 mapstringinterface{} 构建 Claims 更安全手写 map 构造 Claims 看似灵活,但容易漏字段类型、拼错 key、忘记 exp,而且无法静态检查。尤其 exp、iat、nbf 这些字段,map 里写成字符串或 float64 都会导致解析失败或静默忽略。示例对比:立即学习"go语言免费学习笔记(深入)";// ? 危险:字段名小写、exp 是 float64、没 iatclaims := mapstringinterface{}{ "exp": time.Now().Add(24 * time.Hour).Unix(), "user_id": 123,}<p>// ? 推荐:类型明确、字段标准、自动处理 exp/iad/nbfclaims := jwt.RegisteredClaims{ExpiresAt: jwt.NewNumericDate(time.Now().Add(24 * time.Hour)),IssuedAt: jwt.NewNumericDate(time.Now()),Subject: "user:123",}校验时必须调用 token.Claims.Valid(),否则 exp 不生效很多人解析 token 后只取 token.Claims 里的字段就完事,比如直接读 claims"user_id"。但这时 exp 校验根本没触发------Valid() 才是真正执行时间字段比对的入口。 WisPaper 复旦大学研发的AI学术搜索工具,5分钟内筛选1000篇论文

相关推荐
北斗落凡尘13 小时前
LangGraph 入门实战(2)
python·langchain
IvorySQL14 小时前
PostgreSQL 日报 | JOIN 与外键优化(8 月 9 日)
数据库·postgresql
ltl14 小时前
自治数据库十年回顾:Peloton、NoisePage、OtterTune 到云原生 auto-tuning
数据库
ttod_qzstudio14 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
jufeng130715 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 1 篇】
人工智能·python·架构·agent
灯澜忆梦15 小时前
【MySQL10】进阶篇 | 索引_#2性能优化
数据库·sql·mysql·性能优化
月光船幽幽16 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
C++ 老炮儿的技术栈17 小时前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio
MC皮蛋侠客17 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
_oP_i18 小时前
python 后缀 mjs文件
开发语言·python