簡體   English   中英

如何刪除令牌 JWT

[英]how to delete a token JWT

我正在使用 JWT、不記名令牌對 spring 框架進行身份驗證。

public String generateToken(UserProfile authentication) {

  // set the expiration time        
  Date now = new Date();
  Date expiryDate = new Date(now.getTime() + jwtExpirationInMs);

  // Generate token and return      
  return Jwts.builder()
    .setSubject(authentication.getUsername())
    .claim("roles","user")
    .setIssuedAt(new Date())
    .setExpiration(expiryDate)
    .signWith(SignatureAlgorithm.HS512,jwtSecret)
    .compact();

上面的類生成一個令牌並回復給用戶。 我的問題是當用戶在第一個令牌到期時間之前發出新令牌時,我將如何刪除令牌; 當用戶在第一個令牌過期之前請求新令牌時撤銷第一個令牌?

我認為這與 JWT 無關。 你可以

  • 將舊的添加到一些快速存儲(如 Redis 或 memcached)
  • 在值上設置一些超時(比不再需要令牌的到期日期長一點)
  • 檢查來自請求的令牌是否存在於您的緩存中,如果是,則拒絕它

基本上,做黑名單

我不知道任何其他解決方案

如果您使用 JWT,則無法撤銷令牌。 它的有效性是嵌入的。

當您要撤銷令牌時,請不要使用 JWT。 您必須保留令牌並在每次請求時檢查其有效性。

如果您真的要使用它,請將其保存在 db 中,就好像它不是獨立的一樣,並添加一個標志或時間戳以確保有效性。

檢查 JWT 文檔: https : //jwt.io/

暫無
暫無

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

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