jwt同一会话_在会话中使用JWT

jwt同一会话

这个话题已经在黑客新闻,reddit和博客上讨论了很多次。 共识是–请勿使用JWT(用于用户会话)。

而且我在很大程度上同意对JWT的典型论点 , 典型的“但我可以使其工作……”的解释以及JWT标准的缺陷的批评 。 。

我不会在这里重复所有内容,因此请阅读这些文章。 您真的可以使用JWT付诸实践,了解它很复杂,并且对于大多数用例来说几乎没有好处。 我猜对于API调用是有意义的,特别是如果您在单页应用程序中为RESTful客户端重用相同的API,那么我将重点讨论用户会话用例。

受到所有这些批评之后,我违背了以上文章的建议,使用了JWT,浏览了他们的论点并声称我处于最佳状态。 我很可能是错的。

我将用户ID存储在作为cookie存储的JWT令牌中。 不是本地存储,因为这是有问题的。 不是整个状态,因为我不需要那可能导致问题(在链接的文章中指出)。

我想避免在设置中跨节点共享会话。 这是不使用Web服务器/框架的会话机制的一个非常令人信服的原因。 不,您不需要拥有数百万的用户即可要求您的应用程序在多个节点上运行。 实际上,它几乎应该始终在(至少)两个节点上运行,因为节点会死掉并且您不希望停机。 负载平衡器上的粘性会话是解决该问题的一种方法,但是您只是将集中的会话存储外包给了负载平衡器(有些负载平衡器可能不支持它)。 共享的会话缓存(例如memcached,elasticache,hazelcast)也是一种选择,许多Web服务器(至少在Java中)支持可插拔的会话复制机制,但这为架构引入了另一个组件,要支持的堆栈的另一部分,以及可能会破裂。 它不一定很坏,但是如果有一种简单的方法可以避免它,那我就去做。

为了避免共享会话存储,您需要在请求/响应周期中传递整个会话状态(如cookie,请求参数,标头),或者需要接收userId并从数据库或缓存中加载用户。 据我们了解,前者可能是一个错误的选择。 尽管有诸如ASP.NET和JSF之类的框架将整个状态转储到页面HTML内的事实,但这在直观上听起来并不好。

对于后者–您可能会说:“好吧,如果您打算在每个请求中从数据库中加载用户,这将会很慢,并且如果您使用缓存,那么为什么不对会话本身使用缓存呢?” 。 好吧,缓存可以是本地的。 记住,我们只有几个应用程序节点。 每个节点可以为当前活动的用户提供一个本地内存缓存。 所有节点都将加载相同的用户(在负载均衡器以循环方式将一些请求路由到它们之后)的事实并不重要,因为该缓存很小。 但是您不必在节点之间复制它,也不必照顾从群集传来的新节点,处理节点之间的网络问题,等等。每个应用程序节点都是孤岛。应用程序节点。

因此,这是我对链接文章的第一个反对意见–仅将用户标识符存储在JWT令牌中并不是没有意义的,因为它使您免于会话复制。

对JWT标准及其加密的安全性的批评又如何呢? 完全正确,很容易用脚射击。 这就是为什么我仅将JWT与MAC一起使用,并且仅将其与接收令牌时经过验证的特定算法一起使用的原因,因此(据称)避免了所有陷阱。 公平地说,我愿意使用其中一篇文章中提出的替代方案PASETO ,但是它没有Java库,实现它需要花费一些时间(将来可能会这样做)。 总结一下-如果存在另一种易于使用的经过身份验证的cookie加密方法,我会使用它。

所以我基本上是在“ PASETO模式”下使用JWT,它只有一种操作和一种算法。 作为一般方法,这应该没问题–本文不批评在令牌(和无状态应用程序节点)中包含用户标识符的想法,而是批评标准的复杂性和脆弱性。 这是我的第二个反对意见–“不使用JWT”被广泛理解为“不使用令牌”,而事实并非如此。

在为简化体系结构和缺乏共享状态而进行的努力中,是否引入了一些漏洞? 我希望不是。

翻译自: https://www.javacodegeeks.com/2018/03/using-jwt-sessions.html

jwt同一会话

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

表必须要有主键吗_玄关隔断什么材质好?玄关隔断必须要做吗?

为了避免一到门口就能够看到全部室内的东西,为了更好的保护家居的隐私,目前有很多人都会在玄关的位置加一个隔断,而玄关隔断什么材质好?在做玄关隔断的时候,有些人觉得做了隔断会太浪费空间了,而玄关隔断必须要做吗?…

深度学习pytorch--多层感知机(三)

使用pytorch框架实现多层感知机和实现softmax回归唯一的不同在于我们多加了一个全连接层作为隐藏层。它的隐藏单元个数为256,并使用ReLU函数作为激活函数。#模型的核心代码为:nn.Linear(num_inputs, num_hiddens),nn.ReLU(),nn.Linear(num_hiddens, num_outputs),

mysql 日期索引的使用_日期使用

mysql 日期索引的使用时区糟透了。 特别是夏令时。 我不介意像与此行为相关的编程错误那样,不停移动时钟或失去一个小时的睡眠。 更糟糕的是Java的旧日期/时间API。 Java社区通过JSR 310公开承认了这一点,该JSR 310代替了Java Date&Time API…

axure元件库 文件上传_手把手教你打造一套属于产品经理自己的元件库

之前有篇文章聊完了如何打造一套属于自己的原型图设计规范,今天咱们来聊聊如何打造一套属于自己的元件库。毕竟,每个追求效率的PM,总会拥有一个专属自己的Axure元件库,并不断打磨优化。今天就教大家一步一步创建属于自己的Axure元…

KMP算法笔记

1.KMP算法本质上就是对朴素匹配算法(BF)的一个优化,减少朴素匹配算法中不必要匹配的次数,核心代码和朴素匹配算法差不多,BF是移动字串逐个字符匹配,每次模式串(子串)匹配只移动一个字符单位,而KMP算法是每次模式串匹配…

正则表达式的非捕获性分组

非捕获性分组,通常由一对括号加上 ?: 加上子表达式组成,非捕获性分组不会创建反向引用,就好像没有括号一样。如下: var color "#808080"; var output color.replace(/#(?:\d)/,"$1""~~"); console.log(Re…

Spring Security并发会话控制示例教程–如何限制Java JEE Web应用程序中的用户会话数...

如果您不知道, Spring安全性可能会限制用户可以拥有的会话数。 如果要开发Web应用程序,尤其是Java JEE中的安全Web应用程序 ,则必须提出与在线银行门户相似的要求,例如, 每个用户一次只能有一个会话,或者每…

prometheus命令_Prometheus 入门

学习安装 Prometheus 监控和警报系统并编写它的查询。-- Michael Zamot(作者)Prometheus 是一个开源的监控和警报系统,它直接从目标主机上运行的代理程序中抓取指标,并将收集的样本集中存储在其服务器上。也可以使用像 collectd_exporter 这样的插件推送…

正则表达式的命名分组

语法格式&#xff1a;(?<name>…) 命名分组也是捕获性分组&#xff0c;它将匹配的字符串捕获到一个组名称或编号名称中&#xff0c;在获得匹配结果后&#xff0c;可通过分组名进行获取。 如下是一个python的命名分组的例子&#xff1a; import re data "#80808…

python--字符/文本编码解码笔记

字符/文本编码解码笔记1.字符问题编码和解码2.字节概要3.基本的编解码器编码类型史字符编码ASCII码GB2312以及其他编码UNICODE标准编码UTF-8编码4.了解编解码问题处理UnicodeEncoderError解决方法:处理UnicodeDecodeError解决方法5.修改源代码编码6.查看文件编码方式终端查看文…

neo4j cypher_Neo4j:Cypher – Neo.ClientError.Statement.TypeError:不知道如何添加Double和String...

neo4j cypher最近&#xff0c;我将支持Neo4j的应用程序从Neo4j 3.2升级到Neo4j 3.3&#xff0c;发现围绕类型强制的行为发生了有趣的变化&#xff0c;导致我的应用程序抛出了很多错误。 在Neo4j 3.2和更早版本中&#xff0c;如果将String添加到Double&#xff0c;它将把Double…

easyui数据表格显示复选框_【Excel技巧】使用控件一键切换实现单位元和万元随意显示...

工欲善其事&#xff0c;必先利其器。职场上亦是如此。Excel报表想要做得完美&#xff0c;首先肯定Excel要精通。做一份Excel报表&#xff0c;如果涉及到金额&#xff0c;当金额比较大&#xff0c;单位到底是用元还是万元&#xff0c;经常是大家纠结的一个问题。我们今天就来介绍…

正则表达式的固化分组

固化分组&#xff0c;又叫原子组。 语法格式&#xff1a;(?>…) 我们在使用非贪婪模式时&#xff0c;匹配过程中可能会进行多次的回溯&#xff0c;回溯越多&#xff0c;正则表达式的运行效率就越低。而固化分组就是用来减少回溯次数的。 实际上&#xff0c;固化分组 (?…

Requests库基本使用

requests库基本使用基本流程python中一个基于网络请求的模块&#xff0c;功能强大&#xff0c;简单便捷&#xff0c;效率极高&#xff0c;可以取代古老的urllib模块。作用&#xff1a;模拟浏览器向服务器发起请求。基本流程 1.指定URL2.对指定的URL发起请求(get或post)3.获取响…

tls 使用java生成_同时使用传入和传出连接时,相互TLS身份验证存在Java问题

tls 使用java生成在大多数企业环境中&#xff0c;应用程序之间的连接中使用某种形式的安全通信&#xff08;例如TLS或SSL&#xff09;。 在某些环境中&#xff0c; 相互&#xff08;双向&#xff09;身份验证也是一项非功能性要求。 有时将其称为双向SSL或双向TLS身份验证。 因…

正则表达式的环视实际应用案例

一、千位分隔符案例&#xff08;一&#xff09; 逆序环视和顺序环视结合应用。 **需求&#xff1a;**数字格式化成用 , 分隔的货币格式。 正则表达式&#xff1a;(?n)(?<\d)(?<!\.\d*)(?(\d{3})(\.|$)) 测试代码&#xff1a; double[] data new double[] { 0,…

软件工程专插本_2021年专插本部分招生专业(拟),广科/广东理工/华商/培正/松田/工商大!...

小师姐从各专插本交流群中收集到了6所院校的2021年本科插班生拟招生专业&#xff1a;广东理工学院、广东科技学院、广东财经大学华商学院、广州大学松田学院、广东培正学院、广东工商职业技术大学。ps&#xff1a;以下只是拟招生专业&#xff0c;具体还是以考试院公布的为准。另…

Requests库实战(一)---网页采集器

网页采集器User-Agent伪装完整代码功能&#xff1a;通过动态url来实现用户输入搜索关键字&#xff0c;返回搜索到的页面。User-Agent伪装 一种反爬机制。 原理&#xff1a;网站的服务器会检测对于请求的载体身份标识&#xff0c;如果检测到请求的载体身份标识为某一款浏览器&a…

ES6 对正则表达式的扩展

文章目录修饰符 y修饰符 uECMAScript 6.0&#xff08;以下简称 ES6&#xff09;是 JavaScript 语言的下一代标准&#xff0c;已经在 2015 年 6 月正式发布了。它的目标&#xff0c;是使得 JavaScript 语言可以用来编写复杂的大型应用程序&#xff0c;成为企业级开发语言。修饰符…

transformer机制讲解_【核心代码解读】Transformer-XL

[论文] Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context​arxiv.orgMotivationTransformer在预训练阶段&#xff0c;设置了固定序列长度max_len的上下文&#xff0c;finetuning阶段&#xff0c;模型不能获取大于max_len的上下文依赖&#xff1b;Tran…