JSON Web 令牌的实用程序?它比当前系统更有效吗? [关闭]

Posted

技术标签:

【中文标题】JSON Web 令牌的实用程序?它比当前系统更有效吗? [关闭]【英文标题】:Utility of JSON Web Tokens ? How is it more efficient than current systems? [closed] 【发布时间】:2015-08-02 15:02:03 【问题描述】:

我一直在阅读有关 JSON Web Tokens 的内容,一些问题突然出现在我的脑海中。我已经阅读了很多关于我们应该如何从基于会话的方法转向 JWT 的说法。我更多地考虑的是 Node JS 后端,它为 UI 和移动设备公开 API

声明:JWT 不要求您为每个 http 请求与您的键值数据存储进行通信。

问题 1:我不能为所有用户拥有一个私钥(如果我只有一个私钥会有什么安全风险?)。那么无论如何我都需要一个数据库。

声明:JWT 在每次请求时发送令牌。因此我们不需要在会话中存储任何数据,例如“姓名、电子邮件”,而是可以驻留在令牌本身上。

问题 2:负载的大小不会增加吗,因为它们会为每个请求发送并且还包含数据?

声明:您可以使用相同的方法进行移动身份验证以及 Web UI 身份验证。

问题 3:由于服务器现在必须解密令牌并与服务器通信,这对 Web UI 来说不是开销吗?

Claim : 将令牌传递给 JS 并将令牌存储在 sessionStorage 或 localStorage 中。

问题 4:由于 sessionStorage 中没有“httpOnly”的概念,这不是安全问题吗? chrome插件也可以通过获取token并登录来规避安全吗?

最后,除了 CRSF 问题,在 UI 和 Mobile Auth 之间共享代码以及 CSRF 的好处之外,我真的没有看到当前基于会话的机制有什么好处。我的想法对吗?

另外,与传统的基于会话的系统相比,JWT 有哪些缺点

【问题讨论】:

【参考方案1】:

问题 1

是的,如果您想为每个用户唯一地签署 JWT,那么您需要将这些密钥存储在您的数据库中

此外,无论如何您都需要将令牌存储在您的数据库中,因为当令牌被撤销时,即使令牌有效,您也需要拒绝该请求

但这里的重点是这种基于令牌的身份验证对所有客户端都很有用,而不仅仅是我们的应用程序,因此不需要重写 API

JWT 是基于令牌的身份验证中令牌的一种格式

问题 2

是的,即使您在 JWT 中添加少量细节,您的有效负载也可以轻松达到 700 到 1000 个字符

但它有助于在不点击的情况下获得有关经过身份验证的用户的清晰信息,这里的建议是将其余部分存储在数据库中并在需要时使用它

问题 3

不,所有客户端(Webapp)需要做的就是在每个请求中存储和发送该令牌,这与发送会话cookie相同(它只是自动的)

问题 4

是的,任何人都可以复制令牌并获得访问权限(但它会在短时间内过期)这与(会话劫持)相同,或者在会话建立后,用户可以直接从 bowser 中的其余控制台调用 APIs,它仍然作品

在这种情况下,令牌是有效的,因为它通常具有较短的生命周期而不是会话的生命周期

JWT 有真正的好处,最重要的是可以向任何客户端公开相同的 API,无需为 Webapp 和其他客户端编写单独的 API

JWT 仍然是一个草案而不是一个规范,如果你仔细使用它会有真正的好处,搜索一下基于令牌的身份验证你会发现比会话有很多优势

【讨论】:

谢谢。所以 JWT 只能用于单页应用程序而不是服务器渲染的网页,对吗? 如果您希望您的 API 需要被多个客户端使用,请使用基于令牌的身份验证,请使用使用 JWT 或随机令牌来满足您的应用要求

以上是关于JSON Web 令牌的实用程序?它比当前系统更有效吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

JSON Web令牌(JWT)

对 Bearer 令牌使用 JSON Web 令牌和 Firestore 支持

带有 .NET JSON Web 令牌处理程序的 Google 身份工具包令牌验证异常

如何在当前 Web 应用程序的 iframe 中使用有效令牌?

使用 angularjs ui 时节点/Angularjs 应用程序未接收 JSON Web 令牌

Django:基于 DRF 令牌的身份验证 VS JSON Web 令牌