关于token的生成格式--Bearer头部说明

发布时间 2023-11-20 11:48:36作者: xiaobaibao

1.Bearer头部:好处在于可以让请求方和服务方都快速而准确地识别Token的传递方式,使得身份验证更加规范化和通用化,便于开发和维护。但并没有更安全,且具体使用须前后一致。

2.带Bearer头部的生成和解密如下:

public String createTokenByBao(String userId) {
    Date date = new Date();
    String token = Jwts.builder()
            .setSubject(userId)
            .setIssuedAt(date)
            .setExpiration(new Date(System.currentTimeMillis() + expireTime * 60 * 1000))
            .signWith(SignatureAlgorithm.HS256, secret)
            .compact();
    return "Bearer " + token; // 添加Bearer前缀
}
public Integer getUserIdFromToken(String token) {
        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(LOGIN_TOKEN_SECRET) // 使用相同的签名密钥
                    .parseClaimsJws(token.replace("Bearer ", "")) // 将Token字符串中的Bearer前缀移除,然后将去除Bearer前缀的Token字符串作为参数传递给 .parseClaimsJws() 方法
                    .getBody();

            // 提取openid或其他用户ID字段
            return new Integer(claims.getSubject());
        } catch (JwtException e) {
            // JWT验证异常,令牌无效
            return null; // 可以根据实际需求返回特定的错误标识或抛出自定义异常
        }
    }

3.使用以上方式生成的token样式:

Bearer <JWT Token>
Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE1MTYyMzkxMjJ9.Tp6vv-w3fSbJ3vYPnDpC2ucHtUzFZKKQ5HG4BeZMK5c (仅示例)