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篇论文

相关推荐
黄焖鸡能干四碗4 小时前
固定资产管理系统建设方案和源码(Java源码)
大数据·数据库·人工智能·物联网·区块链
JoneBB5 小时前
ABAP Webservice连接
运维·开发语言·数据库·学习
解决问题no解决代码问题5 小时前
从乱码到脱敏导出:TiDB CSV 导出实战全指南
数据库
scan7245 小时前
智能体多个工具调用
python
未若君雅裁5 小时前
MySQL高可用与扩展-主从复制读写分离分库分表
java·数据库·mysql
2401_867623985 小时前
CSS Flex布局中如何设置子元素间距_掌握gap属性的现代用法
jvm·数据库·python
月落归舟5 小时前
一篇文章了解Redis内存淘汰机制与过期Key清理
数据库·redis·mybatis
即使再小的船也能远航5 小时前
【Python】安装
开发语言·python
weixin_421725265 小时前
Linux 编程语言全解析:C、C++、Python、Go、Rust 谁更强?
linux·python·go·c·编程语言
没有梦想的咸鱼185-1037-16635 小时前
AI-Python机器学习、深度学习核心技术与前沿应用及OpenClaw、Hermes自动化编程
人工智能·python·深度学习·机器学习·chatgpt·数据挖掘·数据分析