jwt的使用

本文总阅读量
本文最后更新于2 分钟前,文中所描述的信息可能已发生改变。

JWT(JSON Web Token)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息作为 JSON 对象。JWT 可以通过数字签名进行验证,这样就可以确保在传输过程中的数据不被篡改。

JWT的组成

  • Header(头部): 头部通常由两部分组成,令牌的类型("typ")和所使用的签名算法("alg")。例如:{"alg": "HS256", "typ": "JWT"}
  • Payload(载荷): 载荷包含了被加密的信息,例如用户的身份信息。此外,载荷也可以包含一些额外的元数据。例如:{"sub": "1234567890", "name": "John Doe", "admin": true}
  • Signature(签名): 签名是头部和载荷的组合的加密结果,用于验证令牌的真实性和完整性。签名的生成通常使用头部中指定的算法以及一个密钥。例如:HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

JWT应用场景

  • 身份认证
  • 单点登录
  • 授权 等等

在springboot中使用

java
public class JwtUtil{
    /**
     * 生成一个jwt令牌
     * @param secretKey 签证的密钥
     * @param ttlMillis 过期时间
     * @param claims 设置的自定义信息
     * @return
     */
    public static String createJwt(String secretKey, Long ttlMillis, Map<String,Object> claims){
        SignatureAlgorithm hs256 = SignatureAlgorithm.HS256;
        String token = Jwts.builder()
                //设置自定义信息
                .setClaims(claims)
                //设置加密算法与密钥
                .signWith(hs256, secretKey.getBytes(StandardCharsets.UTF_8))
                //设置过期时间
                .setExpiration(new Date(System.currentTimeMillis()+ttlMillis))
                //生成令牌
                .compact();
        return token;
    }

    /**
     * 解析一个jwt令牌
     * @param token 令牌
     * @param secretKey 自定义密钥
     * @return
     */
    public static Claims parseJwt(String token,String secretKey){
        Claims claims = Jwts.parser()
                //设置解密用的密钥,与加密时的需为同一个
                .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))
                //设置要解密的令牌,注意方法名是Jws
                .parseClaimsJws(token)
                //生成内容,格式为xxx.xxx.xxx
                .getBody();
        return claims;
    }
}
web项目中的文件上传与下载
SpringBoot中通过第三方Swagger-UI来使用Swagger
Valaxy v0.18.5 驱动 | 主题 - Yun v0.18.5
本站总访问量
本站访客数 人次
本站已运行0 天0 小时0 分0 秒后缀