Java 如何使用spring boot jwt注销

Java 如何使用spring boot jwt注销,java,spring,spring-boot,jwt,restapi,Java,Spring,Spring Boot,Jwt,Restapi,我正在使用这个例子 用于使用json web令牌(JWT)创建spring引导rest api。但我没有找到任何使用io.jsonwebtoken maven依赖项强制注销的api 我在pom中使用此依赖项: groupId io.jsonwebtoken artifactId jjwt version 0.9.1 groupId io.jsonwebtoken 人工关节 版本0.9.1 任何人都可以告诉我这个依赖关系,是否提供任何注销或撤销令牌api。如果没有,请提供使用此过程强制注销的任何解

我正在使用这个例子 用于使用json web令牌(JWT)创建spring引导rest api。但我没有找到任何使用io.jsonwebtoken maven依赖项强制注销的api

我在pom中使用此依赖项:

groupId io.jsonwebtoken artifactId jjwt version 0.9.1 groupId io.jsonwebtoken 人工关节 版本0.9.1
任何人都可以告诉我这个依赖关系,是否提供任何注销或撤销令牌api。如果没有,请提供使用此过程强制注销的任何解决方案

注销时可以执行以下几项操作:

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

    window.localstorage.removietem(“令牌”)//用于本地存储

    关于他们:

    我的例子是:

  • 但是客户端可以将该令牌存储在某个地方并手动提供。为了避免长时间使用令牌,您应该设置较短的过期时间。例如,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();
    }
    
    此代码段来自使用相同库JWT的my repo:

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

  • 相关文章:

    我认为代币有有效期。您可以简单地缩短过期时间,这样如果令牌被黑客攻击,那么它在过期后将不再有用

    在本例中,我们将使用硬编码的用户值进行用户身份验证
    。通常,令牌机制并没有注销,因为服务器从不创建会话。。。您可以做的是删除(您需要将其存储在某个位置并检查它是否存在…)/deny token(根据某些条件)。在本文中,按照
    Spring Boot+JWT+MYSQL JPA的说明存储和获取用户凭据。
    感谢@Valijon的回复,我只想在使用JWT注销时使令牌失效。因为它不能在服务器端维护会话。所以,我们如何解决强制从jwt注销而不将令牌保存在db中的问题,因为如果我按照命令将令牌保存在db中并设置令牌黑名单。然后我们在每个服务器请求上检查令牌是否为黑名单。我认为这不是注销和签入所有令牌请求黑名单的正确方式。您能告诉我在spring boot rest中注销的任何其他过程或任何其他方法完整的API注销意味着关闭会话,但是使用JWT和其他令牌机制,没有会话。。。对于您的需求,没有任何解决方案。使用与会话相关的标准安全机制,这样您就可以注销…您的意思是JWT不为撤销令牌提供任何东西?如果这是真的,你能告诉我,我们的应用程序移动用户的spring boot rest api身份验证还有其他过程吗。@RakeshKumar我也有同样的问题,你是如何找到解决方案的?感谢@Dmitri对jwt令牌的支持。实际上,我创建了一个后端项目,为android应用程序移动用户提供spring boot rest api。目前我在服务器端使用jwt和spring引导安全无状态会话。但我只是困惑,当手机用户按“从应用程序注销”时会发生什么。那么我们如何使用jwt令牌处理这件事。请帮帮我。嗨,拉凯什库马尔。我不知道adroid应用程序开发是如何完成的。但我认为在您的情况下,最简单的解决方案是从您的应用程序上下文(android应用程序上下文)中删除令牌。令牌将丢失,用户将无法向spring boot rest api发送任何安全请求。所以,在注销时删除令牌。实际上,我担心令牌黑客攻击,如果我使用这个过程从上下文级别删除令牌。如果有人复制此令牌并再次用于另一个api调用。这对应用程序用户来说是有害的。所以,你们能告诉我一些关于服务器端删除jwt令牌的事情吗?如果无法使用SpringBootJWT从服务器端删除令牌,那么请告诉我服务器端的另一种令牌方法(如果有的话)。像SpringBootOAuth2(这个东西提供撤销令牌)。但我不使用这个,因为我们需要一个身份验证服务器。因此,如果您有任何其他方法,请与usI分享针对这种情况提供的第2和第3种方法。您可以限制令牌的过期时间,并在需要时刷新。或者,您可以在注销时将令牌列入黑名单,但在使用多节点spring引导api(多个具有负载平衡的备份服务器)的情况下,您应该使用集中式黑名单存储。如果您只使用api的一个节点,那么您可以在spring boot api中只使用黑名单令牌,而不必担心任何问题。好的@Dmitri,感谢您的支持,感谢您花宝贵的时间“关于JWT令牌”。这对我们来说是非常有益的讨论。谢谢