jose 使用过去的日期生成令牌

问题描述 投票:0回答:1

我正在编辑之前的文字以提供更多信息,并感谢大家的评论。我的时间戳是 1715013453,这是我的 Jwt 类的完整实现

class Jwt {
  private ACCESS_TOKEN_LIFE = '15m';
  private REFRESH_TOKEN_LIFE = '14d';
  private ALG = 'HS512';
  private ACCESS_TOKEN_SECRET = process.env.ACCESS_TOKEN_SECRET;
  private REFRESH_TOKEN_SECRET = process.env.REFRESH_TOKEN_SECRET;

  public async encode(id: string) {
    const accessToken = await this.signJWT(id, this.ACCESS_TOKEN_LIFE, this.ACCESS_TOKEN_SECRET);
    const refreshToken = await this.signJWT(id, this.REFRESH_TOKEN_LIFE, this.REFRESH_TOKEN_SECRET);

    return { accessToken, refreshToken };
  }
  public async verify(token: string, secret: string) {
    try {
      await jwtVerify(token, new TextEncoder().encode(secret));
      return { ok: true, expired: false };
    } catch (error) {
      if (error instanceof Error && 'code' in error && error.code === JwtErrorCodes.Expired) {
        return { ok: false, expired: true };
      }
      return { ok: false, expired: false };
    }
  }
  public revalidate() {}
  public revoke() {}

  private async signJWT(id: string, expiresAt: string, secret?: string) {
    if (!secret) throw new Error('Auth secret missing');

    return await new SignJWT({ id })
      .setProtectedHeader({ alg: this.ALG })
      .setIssuedAt()
      .setExpirationTime(expiresAt)
      .setNotBefore('from now')
      .sign(new TextEncoder().encode(secret));
  }
}

enter image description here好吧我找到了罪魁祸首

禁用所有缓存后,我开始收到此错误,问题是我没有在令牌生命中的数字和字母之间放置空格,并且我使用“从现在开始”,如https://github.com/panva/jose /blob/main/docs/classes/jwt_sign.SignJWT.md#setnotbefore 从现在开始应该是例如 1 秒,这只是一个为了可读性的装饰器,非常感谢大家的帮助!

javascript typescript jwt jose
1个回答
0
投票

正如 @derpirscher 的评论所暗示的,要么你的

expiresAt
解析为 4 天前(根据 docs),要么你的机器时间已关闭,你可以通过运行
Date.now() / 1000 | 0

来检查
© www.soinside.com 2019 - 2024. All rights reserved.