Node js、JWT 令牌和背后的逻辑

2023-11-23

我正在使用 JWT 来保护节点 js urlhttps://github.com/auth0/express-jwt

要创建 JWT 令牌用户会话,我只需执行以下操作:

-> auth/signup
    -> jwt.sign(user_profile,secret,expireInMinutes:{900000000 /*almost never expires*/});

或者在登录呼叫的情况下

 -> auth/login
        -> jwt.sign(user_profile,secret,expireInMinutes:{900000000 /*almost never expires*/});

每次调用受保护的网址时我都会检查req.user这是由 JWT 中间件自动设置的。

现在我想知道:

1 - 调用sign()时JWT令牌存储在哪里?

2 - 每次调用受保护的网址时是否都必须验证()令牌?如果是的话为什么?

3 - 当我为已签名的用户设置新令牌时,旧令牌(如果存在)是否会被删除?如果没有设置有效期或者例如是5年怎么办?

4 - 为什么我无法在同一浏览器/应用程序页面上设置新令牌? 如果我注册新令牌但令牌匹配(我检查过),我会收到无效签名错误 就像我无法在同一浏览器上登录超过 1 个用户


您一定已经使用其他用户之前的回复找到了之前所有问题的答案,但我也会尝试为其他用户澄清一些问题:

1 - 调用sign()时JWT令牌存储在哪里?

当你呼号时,签名的令牌不会存储在任何地方,它是 由sign函数返回,然后你必须将其发送给客户端 这样in就可以存储在客户端了。 (例如会话存储, 本地存储或 cookie)

2 - 每次调用受保护的网址时我都必须验证()令牌吗?如果是的话为什么?

是的你是。这个想法是一旦客户端拥有令牌,他们就会发送 每次发出请求时向服务器发送令牌。令牌是 由服务器处理以确定特定客户端是否有 已经被认证了。

3 - 当我为已签名的用户设置新令牌时,旧令牌(如果存在)是否会被删除?如果没有设置有效期或者例如是5年怎么办?

与第1点的答案略有相关。调用sign函数 只会生成另一个令牌。令牌的过期时间是 存储在签名令牌本身内。所以每次服务器得到一个token 从客户端,它检查过期作为令牌的一部分 确认。需要注意的是,签名的令牌只是 您在执行过程中作为参数传入的“user_profile”对象 签名,加上额外的字段,例如添加到的到期日期 那个物体。

因此一个客户端可以在客户端存储多个令牌。他们 只要它们尚未过期,都将有效。但是,那 想法是仅在客户端已完成时才向客户端发送令牌 旧的过期后再次进行身份验证。

4 - 为什么我无法在同一浏览器/应用程序页面上设置新令牌?如果我注册一个新令牌但令牌匹配(我检查过),我会收到无效签名错误,就像我无法在同一浏览器上登录超过 1 个用户一样

这个想法是每个浏览器有 1 个用户。因为在这种情况下浏览器 是客户。我想不出您需要的用例 每个浏览器/客户端有多个用户,所以你显然在做 有事吗。这并不是说不可能发送多个 令牌到同一浏览器/客户端。

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

Node js、JWT 令牌和背后的逻辑 的相关文章

  • 如何向 jQuery Tokeninput 添加占位符?

    如何将占位符添加到 jQuery Tokeninput 字段 一个正常的placeholder属性在这里不起作用 对于这样的输入
  • 使用 Javascript 在 Imacros 中循环

    我如何使用 javascript 循环 imm imacros 脚本 我搜索了一下 发现了这个 for i 0 i lt n i iimPlay marconame iim 但当我使用它时 我的浏览器 Firefox 18 挂起 for i
  • 在浏览器中语音聊天? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们正在寻求建立一个小组 voice 使用服务器上的node js 在浏览器中聊天 这可能吗 如果您希望您的解决方案是基于服务器端和客
  • 将 Sweet Alert 弹出窗口添加到 React 组件中的按钮

    我为 Bootstrap 和 React 找到了这个完美的 Sweet Alert 模块 我在 Meteor 应用程序中使用它 http djorg83 github io react bootstrap sweetalert http d
  • 如何使用 jQuery 向表中添加新行,并为其分配递增的 id

    我有一个现有的 HTML 表格 它是用户输入 GPS 点的表单的一部分 用户还可以选择上传 GPS 数据点 我想要一个用户可以按下的按钮 其中一些 Javascript 会向表中添加一个或多个新行 但新行必须继续增加表中使用的名称和 id
  • 如何改变HTML5视频的播放速度?

    如何更改 HTML5 中的视频播放速度 我查过视频标签的属性 https www w3schools com html html5 video asp在 w3school 但无法做到这一点 根据这个网站 http www chipwreck
  • 使react-leaflet能够离线使用

    我一直在使用反应传单 https github com PaulLeCam react leaflet图书馆 到目前为止运作良好 现在我希望网站预加载尽可能多的图块 以便网络应用程序 也是 PWA 可以在没有互联网的情况下使用 我找到了一些
  • v-file-input .click() 不是函数

    我试图以编程方式触发 v file input 的 click 事件 因为它在 Vuetify 的文档中 但它显示一个错误this refs imagePicker click is not a function我在这里错过了什么吗 代码重
  • AJAX:检查字符串是否为 JSON?

    我的 JavaScript 有时会在这一行崩溃 var json eval this responseText 当争论时会导致崩溃eval 不是 JSON 在进行此调用之前有什么方法可以检查字符串是否为 JSON 我不想使用框架 有什么方法
  • 使用 jquery 将字符串数组转换为整数

    我正在尝试将 jquery 中的字符串数组转换为整数数组 这是我的尝试 var cdata data values split each cdata function i l l parseInt l 我认为在这种情况下你不需要使用 Jqu
  • Spring OAuth2 - JWT 令牌在服务器上工作但不在本地主机上工作?

    我看到了myapp能够在服务器上正确处理 OAuth2 JWT 令牌 但在本地主机上给出令牌转换错误 我的流程如下 在服务器上 the myapp就在我们的后面custom api gateway 获取访问令牌 通过邮递员 我点击了 api
  • 使水平滚动条始终可见,即使底部不在视图中

    我将用一个片段来开始这个问题 该片段几乎显示了我想要完成的任务 wrapper overflow hidden display flex sidebar min width 200px background 333 color FFF co
  • 如何访问另一个 mobx 商店中的 mobx 商店?

    假设以下结构 stores RouterStore js UserStore js index js each of Store jsfiles 是一个 mobx 存储类 包含 observable and action index js只
  • 选中复选框时提交表单

    有没有办法在选中复选框时提交表单
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方
  • 替换两个引号之间的字符串

    我想转动一根绳子str hello my name is michael what s your s into hello my name is span class name michael span 我怎样才能在 JavaScript
  • 如何修复超出最大调用堆栈大小

    有一个 MERN Firebase 应用程序并收到此错误和一堆 atdeepExtend deepCopy ts 71 RangeError Maximum call stack size exceeded getApps as apps
  • 如何更改订阅值?使用 rxJS

    我正在创建一个计时器 需要你的帮助 我刚刚学习 Angular 和 rxJS 对此我有一些疑问 我正在创建一个具有启动 停止 暂停 重置功能的计时器 并且 btn Reset 必须将我的计时器 暂停 到 300 毫秒 怎么做 D 我的启动定
  • 如何调试 Gulp 任务?

    如何调试我的中定义的 gulp 任务gulpfile js使用诸如 Google Chrome 调试器之类的调试器逐行单步执行任务的代码 对于 Node js 6 3 版本 您可以使用 inspect flag https nodejs o
  • 在 javascript 中使用 xPath 解析具有默认命名空间的 XML

    我需要创建一个 XML xPath 解析器 所有解析都必须在客户端进行 使用 JavaScript 我创建了一个 javascript 来执行此操作 在默认名称空间发挥作用之前 一切看起来都正常 我根本无法查询具有默认命名空间的 XML 我

随机推荐

  • 为什么 check_box 表单助手会生成两个复选框,其中一个是隐藏的?

    这段代码 form fo store products 做 f f check box track inventory 创建这个 html
  • 如何通过 jQuery 设置光标图像?

    在网络应用程序中 我有一个加载事件 如果浏览器正在从服务器加载数据 我希望光标更改为显示时钟的 gif 如何更改光标外观 我只在参考光标外观的博客中找到了这个 this css cursor move 我想改为加载图像 试试这个方法 thi
  • 子集合 List.Any 的表达式树

    我正在使用表达式树构建通用 linq 查询 在子集合上创建表达式时我陷入困境 由于类型不兼容 方法调用会崩溃 通常我知道该放什么 但是 Any 方法调用让我感到困惑 我已经尝试了所有我能想到的类型 但没有成功 任何帮助 将不胜感激 这是我的
  • FullCalendar 在 dayClick 上打开引导模式

    我想在用户单击 fullCalendar 中的某一天时打开引导模式 我查看了 dayClick 事件 但不知道如何调用模型 dayClick function date jsEvent view call the model 调用引导模型的
  • 我必须使用什么 Uxtheme 函数来获取最小化、最大化和关闭按钮的默认大小?

    我正在使用DrawThemeBackground函数在画布上绘制一些系统元素 我需要绘制表单的标题按钮 我错过的唯一部分是如何获得default标题按钮的大小 Exist any Uxtheme function to get that i
  • Android:将多行插入sqlite数据库不起作用

    我正在使用以下 Android 项目方法将单行插入数据库 myDB execSQL INSERT INTO Buss BussName RouteName VALUES buss1 buss2 效果很好 我看到这个链接在sqlite数据库中
  • 这个素数生成器的执行时间可以提高吗?

    我撰写本文时的最初目标是尽可能留下最小的足迹 我可以自信地说 这个目标已经实现了 不幸的是 这使我的实施速度相当缓慢 要生成 200 万以下的所有素数 在 3Ghz Intel 芯片上大约需要 8 秒 是否有办法以最小的牺牲来改善此代码的执
  • Google 图表显示错误的月份

    I ve got a google line chart which shows the correct line but the annotation of the Date is off by one month exactly The
  • 什么时候应该避免使用 NHibernate 的延迟加载功能?

    我听到的关于 NHibernate 延迟加载的大部分说法是 使用它比不使用它要好 似乎最小化数据库访问以减少瓶颈是有意义的 但几乎没有什么事情是不需要权衡的 当然它会迫使你有一些限制设计virtual特性 但我也注意到一些开发人员关闭了某些
  • PostgreSQL 多维数组

    我试图将数据作为多维数组传递 但我得到的行为对我来说似乎很奇怪 具体来说 我试图从二维数组中获取单个元素 因此从二维数组中获取一维数组 但它没有按照我期望的方式工作 在下面的示例中 2 4 和 5 按我预期的方式工作 但 1 和 3 则不然
  • 如何在Python中使用日志记录打印列表项+整数/字符串

    我想打印带有项目索引的列表项目 例如 0 idx 10 degree 0 1 idx 20 degree 0 根据下面的代码 如何将 0 附加为整数 字符串 列表项 import logging class Node object slot
  • 一般最小值和最大值 - C++

    编写一个通用的最小函数 我想到了两个问题 该代码适用于任何输入类型和不同的参数编号 namespace xyz template
  • mysql MyISAM 和 InnoDB 索引使用差异

    我有这些小桌子 item and category CREATE TABLE item id mediumint 8 unsigned NOT NULL AUTO INCREMENT name varchar 150 NOT NULL ca
  • 更改复选框状态而不调用 OnClick 事件

    我想知道当我改变 CheckBox 的状态时 CheckBox gt Checked false 它调用了CheckBox OnClick事件 如何避免它 在较新的 Delphi 版本中 您可以使用类助手来添加此功能 CheckBox Se
  • 作为 MySQL 中的特定用户进行身份验证

    我是 MySQL DB 的全新用户 已经安装了 WAMPSERVER 并且通过 MySQL 控制台使用 MySQL Query 1 每次登录时 它都直接询问我root的密码 但是 我想以不同的用户身份登录 Query 2 如果我确实以 ro
  • 为什么没有调用 didRegisterForRemoteNotificationsWithDeviceToken

    我正在制作一个应用程序 我想在其中实现苹果推送通知服务 我正在按照中给出的分步说明进行操作本教程 但仍然没有调用这些方法 我不知道是什么导致了这个问题 谁能帮我 void application UIApplication applicat
  • Cassandra 启动错误,ThreadPriorityPolicy=42

    当我尝试启动 Cassandra 时 它显示了这样的错误 我已经在 env sh 文件中的 conf 文件中进行了更改 没有类似类型错误的选项适用于此 intx ThreadPriorityPolicy 42 is outside the
  • Rails 4 + simple_form 和 jQuery UI。日期选择器无法通过涡轮链接工作

    我有这个调用日期选择器的表单 Simple form 包装器 应用程序 输入 日期选择器 input rb class DatepickerInput lt SimpleForm Inputs Base def input builder
  • Python Statsmodel ARIMA 启动 [平稳性]

    我刚刚开始使用 statsmodels 进行时间序列分析 我有一个包含日期和值的数据集 大约 3 个月 我在为 ARIMA 模型提供正确的顺序时遇到一些问题 我希望根据趋势和季节性进行调整 然后计算异常值 我的 价值观 不是固定的 stat
  • Node js、JWT 令牌和背后的逻辑

    我正在使用 JWT 来保护节点 js urlhttps github com auth0 express jwt 要创建 JWT 令牌用户会话 我只需执行以下操作 gt auth signup gt jwt sign user profil