- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新 : 我已经结束了对这个问题的研究,并发表了一篇长篇博文来解释我的发现:The Unspoken Vulnerability of JWTs .我解释了使用 JWT 进行本地身份验证的巨大插入力如何遗漏了一个关键细节:必须保护签名 key 。我还解释说,除非您愿意竭尽全力保护 key ,否则最好通过 Oauth 委托(delegate)身份验证或使用传统的 session ID。
我已经看到很多关于 JSON Web token 安全性的讨论——重放、撤销、数据透明度、 token 指定的算法、 token 加密、XSS、CSRF——但我没有看到任何对依赖于签名 key 。
如果有人破坏了服务器并获得了 JWT 签名 key ,在我看来,此人随后可以使用该 key 来伪造未过期的 JWT 并 secret 获得访问权限。当然,服务器可以在每个请求上查找每个 JWT 以确认其有效性,但服务器完全使用 JWT,因此它们不必这样做。服务器可以确认 IP 地址,但如果 JWT 不可信,这也涉及查找,显然这样做会排除可靠的移动访问。
将此与基于 session ID 的服务器入侵进行对比。如果此服务器正在对密码进行哈希处理,则攻击者必须在 session ID 过期之前为每个用户单独获取和使用 session ID。如果服务器只存储 session ID 的哈希值,攻击者将不得不写入服务器以确保访问。无论如何,似乎攻击者的优势较小。
我发现一种使用 JWT 的架构没有这个缺点。反向代理位于外部不受信任的客户端和内部微服务的后端集合之间,described here by Nordic APIs .客户端从授权服务器获取不透明 token ,并使用该 token 与服务器应用程序通信以处理所有请求。对于每个请求,代理将不透明 token 转换为 JWT 并缓存它们的关联。外部世界从不提供 JWT,从而限制了窃取 key 造成的损害(因为代理转到身份验证服务器以确认不透明的 token )。但是,这种方法需要取消引用每个客户端 token ,就像 session ID 需要取消引用每个请求一样,从而消除了 JWT 对客户端请求的好处。在这种情况下,JWT 只允许服务在它们之间传递用户数据,而不必完全信任彼此——但我仍在尝试理解这种方法的值(value)。
我的担忧似乎只适用于不受信任的客户端使用 JWT 作为身份验证 token 。然而,包括 Google API 在内的许多知名 API 都在使用 JWT。我错过了什么?也许服务器违规很少是只读的?有没有办法降低风险?
最佳答案
我相信你在想这个错误的方式。不要误会我的意思,您正在考虑安全性很好,但是您在服务器端仔细检查事物、添加违反无状态 session 目标的额外检查等方面的处理方式似乎是一致的一条通往你自己理智尽头的单行道。
总结两种标准方法:
关于security - 破坏基于 JWT 的服务器是否更具破坏性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37495362/
我有一个 if 语句,如下所示 if (not(fullpath.lower().endswith(".pdf")) or not (fullpath.lower().endswith(tup
然而,在 PHP 中,可以: only appears if $foo is true. only appears if $foo is false. 在 Javascript 中,能否在一个脚
XML有很多好处。它既是机器可读的,也是人类可读的,它具有标准化的格式,并且用途广泛。 它也有一些缺点。它是冗长的,不是传输大量数据的非常有效的方法。 XML最有用的方面之一是模式语言。使用模式,您可
由于长期使用 SQL2000,我并没有真正深入了解公用表表达式。 我给出的答案here (#4025380)和 here (#4018793)违背了潮流,因为他们没有使用 CTE。 我很欣赏它们对于递
我有一个应用程序: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { throw n
我的代码如下。可能我以类似的方式多次使用它,即简单地说,我正在以这种方式管理 session 和事务: List users= null; try{ sess
在开发J2EE Web应用程序时,我通常会按以下方式组织我的包结构 com.jameselsey.. 控制器-控制器/操作转到此处 服务-事务服务类,由控制器调用 域-应用程序使用的我的域类/对象 D
这更多是出于好奇而不是任何重要问题,但我只是想知道 memmove 中的以下片段文档: Copying takes place as if an intermediate buffer were us
路径压缩涉及将根指定为路径上每个节点的新父节点——这可能会降低根的等级,并可能降低路径上所有节点的等级。有办法解决这个问题吗?有必要处理这个吗?或者,也许可以将等级视为树高的上限而不是确切的高度? 谢
我有两个类,A 和 B。A 是 B 的父类,我有一个函数接收指向 A 类型类的指针,检查它是否也是 B 类型,如果是将调用另一个函数,该函数接受一个指向类型 B 的类的指针。当函数调用另一个函数时,我
有没有办法让 valgrind 使用多个处理器? 我正在使用 valgrind 的 callgrind 进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在 valgrind/callgrind
假设我们要使用 ReaderT [(a,b)]超过 Maybe monad,然后我们想在列表中进行查找。 现在,一个简单且不常见的方法是: 第一种可能性 find a = ReaderT (looku
我的代码似乎有问题。我需要说的是: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
根据this文章(2018 年 4 月)AKS 在可用性集中运行时能够跨故障域智能放置 Pod,但尚不考虑更新域。很快就会使用更新域将 Pod 放入 AKS 中吗? 最佳答案 当您设置集群时,它已经自
course | section | type comart2 : bsit201 : lec comart2 :
我正在开发自己的 SDK,而这又依赖于某些第 3 方 SDK。例如 - OkHttp。 我应该将 OkHttp 添加到我的 build.gradle 中,还是让我的 SDK 用户包含它?在这种情况下,
随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗? 例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我一直在研究 PHP 中的对象。我见过的所有示例甚至在它们自己的对象上都使用了对象构造函数。 PHP 会强制您这样做吗?如果是,为什么? 例如: firstname = $firstname;
...比关联数组? 关联数组会占用更多内存吗? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- index is 11; does the
我是一名优秀的程序员,十分优秀!