我一直在阅读使用令牌进行身份验证。但是,我无法理解令牌(JWT)与cookie的不同之处。两者都将存储用户信息(作为令牌中的声明),定义了持久性,并将随每个客户端请求一起发送到服务器。
除了上述内容之外,很少有人会想到这些问题 -
JWT代币在中间攻击中不容易受到人类攻击吗?如果某人窃取了一个令牌(在未加密的频道上),他们不能作为原始用户? (除非我们在声明中添加用户的IP等)
我已经读过一些关于cookie不适合新时代移动应用程序和令牌的咆哮。为什么呢?
为什么令牌被认为比Cookie更安全?是什么让他们对攻击更加无懈可击?
令牌只需要由服务器发出,还是可以从其他OAuth提供商处接收令牌并自定义(添加/删除声明)并重复使用?
性能明智,Cookie不好'由于它们具有大小限制,因此它们只是将会话ID(通常)与会话数据存储在服务器中。这减少了cookie的大小。但是JWT,需要发送整个令牌,因此如果令牌包含会话数据作为声明,那么我们每次都会发送这个不断增加的令牌。如果我说得对,那么JWT与Cookie相比表现不好吗?
由于
答案 0 :(得分:4)
JWT代币在中间攻击中不容易受到人类攻击吗?
是的,您应该使用HTTPS来确保没有人可以在HTTP请求标头中看到JWT。如果有人获得令牌,他们可以冒充原始用户。使用cookies也可以做到同样的事情。
我已经阅读了一些关于cookie不适合新时代移动应用程序和令牌的答案。为什么呢?
大多数移动应用都不使用浏览器发出HTTP请求。浏览器使Web开发人员可以无缝地处理cookie。对于移动开发人员来说,使用JWT比使用cookie更简单。
为什么令牌被认为比Cookie更安全?是什么让他们对攻击更加无懈可击?
令牌不一定比cookie更安全(cookie可以签名,就像JWT一样)。安全性的好处来自于不会暴露于利用浏览器无意中使用cookie的攻击(CSRF攻击)。
令牌是否只需要由服务器发出,或者是否可以从其他OAuth提供商处接收令牌并自定义(添加/删除声明)并重复使用?
JWT签署了一个秘密,只有生成它的服务器/组织才能知道。因此,只有知道秘密的服务器才能验证令牌是否有效。虽然生成令牌的服务器不必与验证令牌的服务器相同,但是您自定义并重新使用其他人的令牌是没有意义的。