gpt4 book ai didi

angularjs - 在 Express.js 中刷新 JWT

转载 作者:行者123 更新时间:2023-12-01 13:50:49 25 4
gpt4 key购买 nike

我在我的 Angular.js 应用程序中使用 JWT 进行身份验证,在服务器端使用 Express.js。

基本上,当用户登录时,会创建一个新 token (使用 https://github.com/auth0/node-jsonwebtoken )并发送回客户端。如果 token 在客户端也有效(angular.js 部分,使用 https://github.com/auth0/angular-jwt ),则会创建一个新用户并将 token 存储在 cookie 中。

因此,对服务器上特定路径的每个请求都受到 token 验证的保护。但是,我的 token 有过期时间。现在,为了争论起见,我们假设过期时间为 30 秒;用户可以主动使用我的应用程序 30 秒,之后,他将被注销。这对用户来说并不友好。

所以我所做的是,对于每个对服务器的请求,我创建一个新 token 并将其发送回响应头。当我在 Angular.js 客户端收到响应时,我读取 token 并覆盖 cookie 中的 token 。这样,只要客户端处于事件状态(或者更确切地说,向服务器端发出请求), token 就会刷新。

现在我想知道以下内容:

  1. 这种方法是否正确?缺点是, token 是在每次请求时创建的,并在每个响应头中发回。 Cookie 经常被覆盖(性能问题?)
  2. 什么是正确的方法?
  3. 如果没有对服务器的请求, token 是否会过期?客户可能仍在使用该应用程序,但是,如果他只是在客户端写东西(或读),则 token 不会刷新。

感谢您的宝贵时间和回复!

最佳答案

  1. 是的,这是一种有效的方法。这是许多人采用的相同方法,包括流行的 Angular 模块 ng-token-auth .你可能考虑将 token 保存到本地存储,然后回退到如果浏览器不支持 cookie 存储(请参阅 http://caniuse.com/#feat=namevalue-storage用于报道)。

  2. 我会按照您的描述去做。

  3. 一种解决方案是使用 $interval 基本上对 API 执行 ping 操作。您需要做的就是发送一个 token 并取回一个新 token (即像现在这样在标题中)。跟踪您发送了多少“ping”。您可以重置某些操作的“ping”次数,例如 ui-router 的 $stateChangeSuccess(即导航到新 View )或任何您喜欢的操作,包括提交表单或其他非 ping 请求.当“ping”次数达到您的阈值时,警告用户他们的 session 即将到期,并在延迟后删除存储的 token 并将其注销。检查来自 API 的身份验证错误的 ping 响应,表明用户可能需要注销和/或重定向。

也许您刚刚给出了 30 秒作为 token 生命周期的示例。我建议更接近您想要的浏览 session 超时。作为引用点,请考虑 Ruby gem devise_token_auth默认为 2 周,即 .NET defaults到 10 小时。您的需求可能会有所不同。

关于angularjs - 在 Express.js 中刷新 JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31803415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com