cookie 与 JWT 有何不同?为什么它们被认为比 JWT 更差?

How are cookies different from JWT and why are they considered worse than JWT?

我一直在阅读有关使用令牌进行身份验证的文章。但是,我无法理解令牌 (JWT) 与 cookie 有何不同。两者都将存储用户信息(作为令牌中的声明),定义了持久性,并将与每个客户端请求一起发送到服务器。

想到的几个问题,除了上面的-

  1. JWT 代币不容易受到中间人攻击吗?如果有人窃取了令牌(在未加密的通道上),他们就不能冒充原始用户吗? (除非我们在声明中添加用户的 IP 等)

  2. 我读过一些抱怨,说 cookie 不适合新时代的移动应用程序,而令牌就是答案。为什么?

  3. 为什么令牌被认为比 cookie 更安全?是什么让它们更不易受到攻击?

  4. 令牌是否只需要由服务器颁发,或者可以从另一个 OAuth 提供者接收令牌并自定义(add/remove 声明)并重新使用它?

  5. 在性能方面,cookie 'bad' 因为它们有大小限制,这就是为什么它们只将会话 ID(通常)与会话数据一起存储在服务器中。这减少了 cookie 的大小。但是 JWT,需要发送整个令牌,所以如果令牌包含声明的会话数据,那么我们基本上每次都会发送这个不断增加的令牌。如果我说得对,与 Cookie 相比,JWT 的性能不是很差吗?

谢谢

Are JWT tokens not prone to Man in the Middle attack?

是的,你应该使用 HTTPS 来确保没有人能看到 HTTP 请求中的 JWT headers。如果有人获得令牌,他们可以冒充原始用户。 cookie 也可以实现同样的效果。

I've read a few rants that cookies are not good for new-age mobile apps and tokens are the answer. Why?

大多数移动应用程序不使用浏览器发出 HTTP 请求。浏览器使 Web 开发人员的交易 w/cookies 变得无缝。对于移动开发人员,使用 JWT 比处理 w/cookies.

更简单

Why are tokens considered more secure than cookies? What makes them more invulnerable to attacks?

令牌不一定比 cookie 更安全(可以对 cookie 进行签名,就像 JWT 一样)。安全优势来自于不会暴露于欺骗浏览器无意中使用 cookie 的漏洞(CSRF 攻击)。

Does a token needs to be issued by the server only, or one can receive a token from another OAuth provider and customize (add/remove claims) and reuse it?

JWT 使用只有生成它的 server/organization 应该知道的秘密进行签名。因此只有知道秘密的服务器才能验证令牌是否有效。虽然生成令牌的服务器不必与验证它的服务器相同,但自定义和 re-use 其他人的令牌没有意义。

Reference