如何使用 spring boot jwt 注销

Rak*_*mar 3 java rest spring jwt spring-boot

我使用此示例https://dzone.com/articles/spring-boot-security-json-web-tokenjwt-hello-world 使用 json Web 令牌(JWT)创建 Spring Boot Rest api。但我没有找到任何使用 io.jsonwebtoken maven dependency 强制注销的 api。

我在 pom 中使用这个依赖项:

groupId io.jsonwebtoken
工件 ID jjwt
版本0.9.1

任何人都可以告诉我有关此依赖性的信息,是否提供任何注销或撤销令牌 api。如果没有,请提供使用此过程强制注销的任何解决方案。

小智 6

注销可以执行以下操作:

  1. 通常,如果我们谈论单页面应用程序,jwt 令牌存储在浏览器本地存储或会话存储中。因此,在这种情况下可以做的第一件事是从存储中删除令牌:

window.sessionStorage.removeItem("token") // 用于会话存储

或者

window.localstorage.removeItem("token") // 用于本地存储

关于它们的参考:https://developer.mozilla.org/ru/docs/Web/API/Window/sessionStorage https://developer.mozilla.org/ru/docs/Web/API/Window/localStorage

我的角度示例:https://github.com/dmcheremisin/TodoApp/blob/master/frontend/src/app/service/jwt-authentication.service.ts

  1. 但客户端可以将此令牌存储在某处并手动提供。为了避免长时间使用令牌,您应该设置较短的过期时间。例如,15 分钟。

如果您需要允许进一步使用令牌 - 请刷新它,否则拒绝。

刷新方法示例:

public String refreshToken(String token) {
    final Date createdDate = new Date();
    final Date expirationDate = calculateExpirationDate(createdDate);

    final Claims claims = getAllClaimsFromToken(token);
    claims.setIssuedAt(createdDate);
    claims.setExpiration(expirationDate);

    return Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact();
}
Run Code Online (Sandbox Code Playgroud)

此代码片段来自我的存储库,它使用相同的库 jjwt: https://github.com/dmcheremisin/TodoApp/blob/master/backend/src/main/java/com/todo/app/util/JwtTokenUtil.java

  1. 黑名单注销令牌。我个人不喜欢这种方法,因为在多节点应用程序的情况下,您需要集中放置黑名单令牌。创建 JWT 令牌是为了避免链接到具体 Web 服务器(节点)会话的会话。因此,您不能仅将令牌存储在应用程序的一个节点中。

相关文章:https://medium.com/devgorilla/how-to-log-out-when-using-jwt-a8c7823e8a6