You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为200天有效期的refresh token生成对应的过期时间?

Refresh Token 过期时间(exp)生成方案

1. exp 字段的标准格式

根据JWT(JSON Web Token)官方规范,exp(过期时间)声明必须使用Unix时间戳格式,也就是从1970-01-01 00:00:00 UTC到目标时间的秒数(部分框架也支持毫秒级时间戳,使用前注意对齐依赖库的规范要求)。

不推荐使用YYYY/MM/DD这类字符串日期格式,原因是不同语言、不同系统对字符串日期的解析规则存在差异,极易出现时区偏差、解析失败等问题,整数类型的Unix时间戳跨平台兼容性最好,计算和校验逻辑也更简单。

2. 200天有效期的exp计算逻辑

基础计算规则非常简单:
exp = 当前Unix时间戳 + 200天对应的秒数
其中200天换算成秒为固定值:200 * 24 * 60 * 60 = 17280000 秒。

3. 常用工具库及示例

生产环境建议直接使用成熟的JWT开源库生成exp字段,不需要手动计算,减少出错概率:

  • Node.js/前端:使用jsonwebtoken库,签发token时直接指定有效期即可自动生成正确的exp字段:
    // 自动处理exp
    const refreshToken = jwt.sign(payload, 密钥, { expiresIn: '200d' })
    // 手动计算也可以:
    const exp = Math.floor(Date.now() / 1000) + 17280000
    
  • Python:使用PyJWT库:
    # 自动处理exp
    refresh_token = jwt.encode(payload, 密钥, algorithm="HS256", expires_delta=datetime.timedelta(days=200))
    # 手动计算:
    exp = int(time.time()) + 17280000
    
  • Java:使用JJWT库:
    String refreshToken = Jwts.builder()
      .setClaims(payload)
      .signWith(密钥)
      .expiration(Date.from(Instant.now().plus(200, ChronoUnit.DAYS)))
      .compact();
    
  • Go:使用golang-jwt库:
    claims := &jwt.RegisteredClaims{
      ExpiresAt: jwt.NewNumericDate(time.Now().Add(200 * 24 * time.Hour)),
    }
    refreshToken := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    

4. 注意事项

  • 计算时间时尽量基于UTC时间计算,避免本地时区偏差导致的有效期不符合预期
  • 手动计算Unix时间戳时注意单位是秒还是毫秒,避免出现有效期多/少1000倍的低级错误
  • 生产环境不要手动实现JWT签发、校验逻辑,优先使用生态成熟的开源JWT库处理所有字段,降低安全风险和出错概率

内容的提问来源于stack exchange,提问作者rejs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:48:01