pat*_*r82 12 security authentication jwt angularjs single-page-application
我了解JWT和单页应用程序在登录和JWT发布方面的流程.但是,如果JWT在到期时已烘焙,并且服务器未在每个请求上发出新的JWT,那么更新的最佳方式是什么?有一个刷新令牌的概念,但在Web浏览器中存储这样的东西听起来像一张金票.
IE我可以很容易地进入浏览器本地存储并窃取刷新令牌.然后我可以去另一台计算机并给自己发一个新令牌.我觉得在JWT中引用的数据库中需要有一个服务器会话.因此,服务器可以查看会话ID是否仍然处于活动状态或是否由刷新令牌无效.
在用户处于活动状态时,在SPA中实施JWT以及处理新令牌发布的安全方法是什么?
如果您的服务器中没有其他限制,您需要检查1小时不活动状态以将用户注销,则每15分钟更新一次令牌(如果它的寿命为30).如果你只是想要这个短暂的JWT并继续更新它,那就行了.
我认为使用JWT的一大优势是实际上不需要服务器会话,因此不使用JTI.这样,您根本不需要同步,因此这是我建议您遵循的方法.
如果您想要强制注销用户,如果他处于非活动状态,只需在一小时内设置一个过期的JWT.有一个$ interval,每隔约50分钟自动获得一个基于旧JWT的新JWT如果在最后50分钟内至少完成了一次操作(你可以有一个请求拦截器只计算请求以检查他是否有效)就是这样.
这样您就不必在数据库中保存JTI,您不必拥有服务器会话,并且它不是一个比另一个更差的方法.
你怎么看?
我认为对于我的实现,经过一番搜索后,我将采用的是......
使用案例:
流动:
用户登录并获得 JWT
JWT 过期后(15 分钟后):
如果用户注销:
尽管如此,每 15 分钟就会调用一次数据库来检查 JTI 是否有效。滑动会话将在跟踪 JWT 的 JTI 的数据库上扩展。如果 JTI 过期,则该条目将被删除,从而强制用户重新进行身份验证。
这确实暴露了一个令牌处于活动状态 15 分钟的漏洞。然而,如果不跟踪每个 API 请求的状态,我不知道还能怎么做。
| 归档时间: |
|
| 查看次数: |
5053 次 |
| 最近记录: |