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 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 validateToken(String token) {

    try {
      // parse the token.
      Map 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等

你可能感兴趣的:(jwt 在微服务中应用)