代码之家  ›  专栏  ›  技术社区  ›  Felix

nestjs中是否有解码JWT的原生方法?

  •  0
  • Felix  · 技术社区  · 3 年前

    在nestjs中,我通过创建一个有效负载对象并对其进行签名来创建JWT(令牌)

        const jwtPayload: JwtPayload = 
        {
          iss:                issuer,
          sub:                info,
          aud:                audience,
       // exp:                - populated by fn: this.jwtService.sign(payload),
       // iat:                - populated by fn: this.jwtService.sign(payload),
          jti:                'XXXX1234' 
        }
    
    const signedJwtAccessToken: string = this.jwtService.sign(jwtPayload); 
    

    Nest将jwtPayload编码为字符串。

    对于清理工作,我想知道JWT的确切到期时间。这会自动编码到 signedJwtAccessToken 所有物 .exp -通过.sign()函数。

    若要在签名后立即访问它,需要对其进行解码。

    解码的最简单方法是什么 signedJwtAccessToken 在签名后立即使用相同的方法???

    笔记

    当JWT从客户端返回时,nestjs在访问fn:validate()时对其进行解码,但我希望在签名后立即解码,然后再将响应发送到客户端,类似于:

                                // signing - encoding
    const signedJwtAccessToken: string = this.jwtService.sign(jwtPayload);
    
                                // decoding
    const decodedJwtAccessToken: string = decodeJwt(signedJwtAccessToken);
    
                                // parsing back to an object
    const updatedJwtPayload: JwtPayload  = JSON.parse(decodedJwtAccessToken);
    
                                // reading property of .exp
    const expires = updatedJwtPayload.exp;
    
    1 回复  |  直到 3 年前
        1
  •  8
  •   hoangdv    3 年前

    只需将其解码为普通jwt令牌即可。如果您使用 nestjs-jwt 包裹,只要打电话 decode 作用

    const decodedJwtAccessToken: JwtPayload = this.jwtService.decode(signedJwtAccessToken);
    
    const expires = decodedJwtAccessToken.exp;
    
    

    或者将令牌解码为base64字符串

    const base64Payload = signedJwtAccessToken.split('.')[1];
    const payloadBuffer = Buffer.from(base64Payload, 'base64');
    const updatedJwtPayload: JwtPayload = JSON.parse(payloadBuffer.toString()) as JwtPayload;
    const expires = updatedJwtPayload.exp;
    
    推荐文章