簡體   English   中英

如何使用 spring 啟動 jwt 注銷

[英]How can logout using spring boot jwt

I am using this example https://dzone.com/articles/spring-boot-security-json-web-tokenjwt-hello-world for creating spring boot rest api with json web token (JWT). 但我沒有找到任何 api 使用 io.jsonwebtoken maven 依賴項強制注銷。

我在 pom 中使用這個依賴:


groupId io.jsonwebtoken
artifactId jjwt
version 0.9.1

任何人都可以告訴我這種依賴關系,是否提供任何注銷或撤銷令牌 api。 如果沒有,請提供使用此過程強制注銷的任何解決方案。

注銷可以做幾件事:

  1. 通常,如果我們談論單頁應用程序,jwt 令牌存儲在瀏覽器本地存儲或 session 存儲中。 因此,在這種情況下可以做的第一件事 - 從存儲中刪除令牌:

window.sessionStorage.removeItem("token") // 用於 session 存儲

或者

window.localstorage.removeItem("token") // 用於本地存儲

參考他們: https://developer.mozilla.org/ru/docs/Web/API/Window/sessionStorage https://developer.mozilla.org/ru/docs/Web/API/Window/localStorage

我在 angular 中的示例: 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();
}

此代碼片段來自我使用相同庫 jjwt 的存儲庫: https://github.com/dmcheremisin/TodoApp/blob/master/backend/src/main/java/com/todo/app/util/JwtTokenUtil.Z93F725A07423FE1C889F448B33D21F46

  1. 黑名單已注銷令牌。 我個人不喜歡這種方法,因為在多節點應用程序的情況下,您需要集中放置列入黑名單的令牌。 創建 JWT 令牌是為了避免鏈接到具體 web 服務器(節點)Z21D6F2740CFB5115082E54E 的 session 因此,您不能僅將令牌存儲在應用程序的一個節點中。

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

我相信代幣有有效期。 您可以簡單地縮短到期時間,這樣如果令牌被黑客入侵,那么它在到期后就沒有用了

我們可以通過更改密鑰來實現這一點。 通常我們為所有用戶維護一個密鑰,因此如果我們更改密鑰,它將撤銷所有用戶的訪問權限。 我們可以為每個用戶維護唯一的密鑰,並且根據注銷的請求,我們可以刪除/更改使用關聯的密鑰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM