jwt 在微服务中应用

jwt token

  • jwt 在api 方式中表中的token生成,验证以及获取jwt解密后携带的用户信息

jwt token过期以及刷新问题

  • jwt token必须设置过期时间,因为如果不设置被盗会一直被使用
  • jwt token过期回跑出ExpiredJwtException异常
  • jwt可以同时为一个用户id创建多个token,都可以使用

结合gateway鉴权

  • 网关放开login接口,登录生成jwt生成token
  • 前端将token在所有的请求时放到http header头中
  • 经过网关,jwt验证token获取携带的用户信息如用户id等
  • 验证失败提示鉴权失败,否则
  • 网关将用户id方到请求头中下方到内部服务

jwt部分简单代码

  • 使用的是jjwt
  • 生成token代码
HashMap<String, Object> map = new HashMap<>();
    // you can put any data in the map
    map.put("userId", String.valueOf(userId));
    map.put("xxx", xxx);
    map.put("ddd", ddd);

    long nowMillis = System.currentTimeMillis();

    JwtBuilder jwtBuilder =
        Jwts.builder().setClaims(map).signWith(SignatureAlgorithm.HS512, SECRET);

    // 过期时间
    if (ttlMillis >= 0) {
      long expMillis = nowMillis + ttlMillis;
      Date exp = new Date(expMillis);
      jwtBuilder.setExpiration(exp);
    }

    return jwtBuilder.compact();

  • 鉴权
public static Map<String, Object> validateToken(String token) {

    try {
      // parse the token.
      Map<String, Object> body = Jwts.parser().setSigningKey(SECRET)
          .parseClaimsJws(token.replace("Bearer", "")).getBody();
      return body;

    } catch (ExpiredJwtException e) {

      throw new AuthBizException(xxx, "签名已经过期");

    } catch (Exception e) {
      throw new AuthBizException(xxx, "签名验证失败");
    }

  }

token如何处理会话

  • redis存储
  • 业务是否需要支持等 mysql等
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容