如何使用 JWT 令牌管理多设备同时登录?

2024-02-11

我的疑问是关于使用 JWT 令牌支持同一用户同时进行多设备登录。我使用 NestJS 作为我的后端。

用户表:userid、用户名、密码(包含哈希密码)、名称、refreshToken(包含哈希刷新令牌)

当用户执行 /api/login 调用时,在拥有有效的用户名和密码的情况下,将使用 jwt 护照库生成访问令牌和刷新令牌。刷新令牌经过哈希处理并存储在该特定用户的用户表的刷新列中,并且访问令牌和刷新令牌通过响应发送到客户端。

在 /api/refresh 调用期间,用户发送的刷新令牌将使用该用户的用户表中存在的哈希刷新令牌进行验证,然后生成新的访问令牌和新的刷新令牌。新的刷新令牌在同一用户行的用户表刷新令牌列中进行散列和更新。

此流程非常适合使用单个设备登录的用户。当同一用户同时使用多个设备登录时,在登录期间,刷新令牌会在用户表的刷新令牌列中针对同一用户行进行更新,这使我们丢失同一用户行的现有/有效刷新令牌用户。

Flow:

  1. 用户 1 使用设备 1 登录 --> 用户 1 的刷新令牌列已使用新的刷新令牌进行更新
  2. 用户 1 使用设备 2 登录 --> 用户 1 的刷新令牌列被新的刷新令牌覆盖,我们丢失了为设备 1 创建的刷新令牌

我想知道为同时使用多个设备登录的用户管理 JWT 刷新流程的最佳工业实践是什么?


最简单的方法是将刷新令牌保存在单独的表中。通常,刷新令牌与用户的帐户数据分开保存,因为用户可以在任何给定时间拥有更多活动的刷新令牌。每当使用刷新令牌时,您都可以找到具体令牌并在其位置创建一个新令牌。

顺便说一句,无需对数据库中保存的刷新令牌进行哈希处理。它们对于您的系统来说是唯一的,它们不是密码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JWT 令牌管理多设备同时登录? 的相关文章

  • 带 Expect 的 Telnet 自动化:身份验证速度慢?

    我正在使用 Telnet 向 Mikrotik 路由器发送命令 telnet 192 168 100 100 l admin Password pass1234 admin ZYMMA gt interface pppoe server r
  • 如何检查令牌过期和注销用户?

    当用户单击注销按钮时 他 她可以自己注销 但是如果令牌过期 他 她就无法注销 因为在我的应用程序中 令牌在服务器端和前端都使用 当用户单击注销按钮时 如果令牌有效 则服务器和浏览器中的令牌都会被清除 当用户未注销并且他 她的令牌过期但未在浏
  • NestJS 在 SwaggerUI 中按字母顺序排列端点

    这个答案 https stackoverflow com questions 24951268 sort api methods in swagger ui表明如果通过 SwaggerUi 将按字母顺序对端点进行排序apisSorter a
  • yesod——密码保护临时站点

    我正在尝试设置 yesod 网络服务器的临时实例 我想知道是否有一些简单的方法可以使整个站点受到密码保护 具体来说 我希望能够提示那些导航到我的网站的人提供凭据 经过身份验证后 它应该像典型站点一样运行 但如果他们无法验证自己的身份 他们就
  • 如何修复套接字 io 中的 400 错误错误请求?

    我有一个前端应用程序 VUE JS 我有一个后端 Nest JS Vue JS 应用程序使用 vue socket io extended 库通过 websockets 从后端获取数据 当 Vue JS 应用程序启动时 我在浏览器中看到错误
  • 未经授权访问用户 Facebook ID?

    我有一个本机 FBML Facebook 应用程序 我不想让应用程序访问者完成授权过程 但我确实想知道他们的 Facebook ID 是否可以找到访问用户的 Facebook ID 而不要求他们 授权 我的应用程序 之前 我说过这是不可能的
  • Android Facebook SDK 4.5.0 登录注销问题,尝试再次登录时出现无效密钥哈希错误

    我按照中所述实现了 Facebook 登录按钮https developers facebook com docs facebook login android https developers facebook com docs face
  • 如何在 GWT 中实现登录屏幕?

    我正在为后端应用程序编写一个小型 GWT 前端 我想知道 GWT 应用程序的最佳安全模型是什么 我正在考虑实现一种 RPC 方法 该方法从客户端网页接收用户密码的 MD5 然后将会话 ID 传回客户端页面 或失败代码 所有后续调用都将简单地
  • 为移动应用程序创建 API - 身份验证和授权

    Overview 我正在寻找为我的应用程序创建一个 REST API 最初 主要目的是供移动应用程序 iPhone Android Symbian 等 使用 我一直在研究基于 Web 的 API 的身份验证和授权的不同机制 通过研究其他实现
  • HttpURLConnection.getResponseCode() 冻结执行/不会超时

    我正在编写一个 Android 应用程序 它连接到受密码保护的 cPanel 服务器 Apache 2 2 22 页面 当身份验证凭据正确时 我的连接没有问题 但是 当凭据不正确时 我的 Android 应用程序似乎会冻结在HttpURLC
  • 当角度4中令牌过期时如何重定向到注销

    我有一个 Angular 4 应用程序 我在那里使用 JWT 令牌进行身份验证 一切正常 但我给 JWT 令牌的令牌过期时间是 1 小时 一旦服务器端的令牌过期 我想从前端应用程序中注销用户 在节点后端 我使用快速中间件通过检查所有请求是否
  • 在本地安全存储用于 Web 服务的密码

    我有一个应用程序 通过发送用户名和密码来对第三方 Web 服务进行身份验证 目前 我每次启动应用程序时都会在 winform 上输入密码 但我需要它自动登录 我想比更安全地存储用户名 密码 Dim username as String us
  • Firebase GAS webapp Google 弹出窗口消失

    我正在尝试升级我的 firebase GAS web 应用程序 之前我有一个弹出窗口 可以让用户使用 Google 登录 我不确定我做错了什么 但我已经升级到新的 firebase 现在正在尝试使用新的代码格式进行相同的登录 发生的情况是
  • Docker Hub API v2 令牌身份验证问题

    目前 我正在开发一个非常轻量级版本的 Docker 容器编排器 并且我必须能够从公共 Docker Hub 注册表获取图像摘要 我想使用 Docker Registry API v2 来实现此目的 我正在尝试使用以下 API 调用获取授权令
  • 使用 JWT 创建 PostMan GET 请求

    我是 PostMan 的新手 通常我使用curl 这是获得 JTW 的一个 curl X POST H X Requested With XMLHttpRequest H Content Type application json H Ca
  • Docker Compose 无法连接到数据库

    我使用 Nestjs 作为后端 并使用 typeorm 作为 ORM 我尝试在 docker compose 文件中定义我的数据库和应用程序 如果我将数据库作为容器运行 并从本地计算机运行应用程序 那么它运行良好 我的程序连接并创建表等 但
  • 免费 PHP 登录库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p

随机推荐