1

我一直在阅读有关 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插件也可以通过获取令牌并登录来规避安全性吗?

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

另外,与传统的基于会话的系统相比,JWT 的缺点是什么?

4

1 回答 1

0

问题 1

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

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

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

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

问题2

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

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

问题 3

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

问题 4

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

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

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

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

于 2015-05-21T08:04:55.630 回答