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等
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容