当前位置: 首页 > 知识库问答 >
问题:

在NodeJS中使JWT令牌无效

葛炜
2023-03-14

我遵循本教程使用JWT令牌。令牌到期时间设置为仅5分钟,但如果我想在使用1分钟后使令牌无效,该怎么办?我希望能够对API进行调用,以删除我的令牌。

我正在使用Express和Node。

从我能收集到的信息来看,我的选择是拥有一个存储令牌的令牌db。当我想让我的令牌过期时,我会从DB中过期/删除该令牌。

我还看到人们随意地说“移除”物理硬盘空间中的令牌,但我无法找出令牌的物理存储位置,以便我移除它。

共有2个答案

李意致
2023-03-14

1) 只需从客户端删除令牌

2) 创建令牌黑名单

3) 只要缩短代币到期时间并经常轮换即可

请看一下失效JSON Web令牌失效JSON Web令牌

郎同化
2023-03-14

JWT令牌身份验证的一般好处是,令牌可以包含通常保存在会话存储中的所有会话信息。这节省了大量资源,尤其是在请求到响应时间方面,因为您不必查找每个请求的会话数据—客户机提供了所有这些。

然而,这是以无法在您选择的时间撤销JWT令牌为代价的,因为您失去了状态信息。

将失效令牌列表保存在数据库中某个位置的明显解决方案消除了上述好处,因为每次请求都必须再次咨询数据库。

更好的选择是发行短期的JWT令牌,即仅一分钟有效的令牌。对于web应用程序,一个普通用户可能在一分钟内执行多个请求(一个用户在应用程序周围导航)。您可以为每个用户提供一个持续一分钟的JWT令牌,当令牌过期的请求到达时,

更新:在呈现过期令牌后发布新的访问令牌是一个非常糟糕的主意-您应该将过期令牌视为无效,就像它是伪造的一样。更好的方法是让客户端提供一个刷新令牌来证明用户的身份,然后才发布新的访问令牌。请注意,验证刷新令牌必须是有状态操作,即您必须在数据库中的某个位置为每个用户提供所有有效刷新令牌的列表,因为如果刷新令牌被破坏,用户必须有使该令牌无效的方法。

 类似资料:
  • 我被这个困扰了大约3天。基本上,我正在尝试使用Tymon在laravel中生成JWT令牌。这是我的控制器文件。 我使用Chrome postman测试了此api,但它报告了以下错误: JWT.php第73行出现错误异常:传递给Tymon\JWTAuth\JWT::fromUser()的参数1必须是第217行上的Tymon\JWTAuth\Contracts\JWTSubject、App\User给

  • 问题内容: 节点和角度。我有一个MEAN堆栈身份验证应用程序,在其中按如下所述在成功登录时设置JWT令牌,并将其存储在控制器的会话中。通过服务拦截器将JWT令牌分配给config.headers: authservice.js Interceptor(省略了requestError,response和responseError): 现在我想从令牌中获取登录的用户详细信息,我该怎么做?我尝试如下,但

  • 节点和角度。我有一个平均堆栈身份验证应用程序,其中我在成功登录时设置JWT令牌,如下所示,并将其存储在控制器中的会话中。将JWT令牌分配给config。通过服务拦截器的标头: authservice.js拦截器(省略了请求错误、响应和响应错误): 现在我想从令牌中获取登录用户的详细信息,我该怎么做?我尝试了如下,但没有成功。当我记录来自用户的错误时。js文件它说“ReferenceError:未定

  • 我有以下代码在Javascript中解码Jwt令牌(参考:如何在Javascript中解码Jwt令牌) 我从上面的代码中得到了我需要的有效负载,但我在节点中实现了它,那里我们没有“atob”函数来解码base64编码的字符串 似乎我们需要在节点中使用缓冲区。我做了研究,提出了下面的解决方案,但不起作用。 请让我知道是否有更好的方法-没有库(Jwt或decode-Jwt)

  • 我试图测试我正在构建的一个关于JWT的软件的功能,以了解它,它使用Firebase JWT PHP包 我正在尝试创建一个使用密钥对作为编码/解码的测试用例,但无法获得http://jwt.io页面以使用我的密钥创建令牌。 这些是我使用命令创建的密钥,没有任何修改。 我转到页面,选择HS256/384/512并删除页面默认设置的键。然后我粘贴我的私钥以便对我的数据进行签名。但是,该页面不会生成任何J

  • 问题内容: 我目前正在使用Golang应用程序。我从客户端收到JWT令牌,在Go中,我需要对该令牌进行解码并获取以下信息:用户,名称等。我正在检查可用于处理JWT的库令牌,我来到https://github.com/dgrijalva/jwt- go ,但我看不到如何简单地制作所需的东西。 我有令牌,我需要将信息解码为地图或至少为json。在哪里可以找到如何做的指南?谢谢! 问题答案: 函数接受第