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 而不是 map[string]interface{} 构建 Claims 更安全手写 map 构造 Claims 看似灵活,但容易漏字段类型、拼错 key、忘记 exp,而且无法静态检查。尤其 exp、iat、nbf 这些字段,map 里写成字符串或 float64 都会导致解析失败或静默忽略。示例对比:立即学习"go语言免费学习笔记(深入)";// ? 危险:字段名小写、exp 是 float64、没 iatclaims := map[string]interface{}{ "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篇论文

相关推荐
weixin_568996061 小时前
Cgo 中正确设置 C 结构体回调函数指针的完整方案
jvm·数据库·python
Jun6261 小时前
【RV1103】AD4115实现8通道ADC采样,MQTT数据传输,1K采样率
linux·python
丶小鱼丶2 小时前
垃圾对象判定算法
jvm
橘颂TA2 小时前
【Linux】自旋锁
linux·开发语言·数据库·c++
LiAo_1996_Y2 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
knight_9___2 小时前
LLM工具调用面试篇1
开发语言·人工智能·python·面试·agent
2601_956139422 小时前
快消品品牌全案公司哪家强
大数据·人工智能·python
源码之家2 小时前
Python股票数据分析与预测系统 大数据项目
大数据·python·机器学习·数据挖掘·数据分析·股票·可视化
甄心爱学习2 小时前
【项目实训(个人5)】
python·github