JWT和签名cookie之间的区别是什么?



我正在研究JWT作为使用cookie的传统会话的替代方案,但我看不出它们与签名cookie(例如Express通过cookie-parser之类的中间件提供的签名cookie)有什么根本区别。

在它们中,最后一部分是有效载荷的签名,它保证有效载荷没有被篡改。

签署饼干:

user=tobi.CP7AWaXDfAKIRfH49dQzKJx7sKzzSoPq7/AcBBRVwlI3 

等效JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiVG9iaSJ9.kCTlR_Igb4H5cqBEDedShM2ivSQijPQkWqN4pZAXb2g

除此之外,

(1) JWT没有原点限制,

(2) cookie内容是立即可读的,而JWT内容(报头+有效负载)是base64编码的

与签名cookie相比,JWT有什么明显的优势吗?

注意不要混淆这些问题:cookie主要是一种在客户端存储数据的机制,它们本质上不是一种身份验证机制——但是我们这样使用它们:)

jwt的主要优点是声明的结构(带有公共字段的JSON)和声明的签名机制。这都是规范,没有什么特别的。但是有一种通用的方式来持久化身份断言是很好的。

您仍然需要以安全的方式存储JWT,带有HttpOnly; Secure的cookie是最好的选择。这可以防止cookie被JavaScript环境读取,从而防止XSS攻击。

我已经写了一些关于jwt的博客文章,它们包含了更多的信息,将有助于回答你的问题:

使用JSON Web令牌(JWTs)构建安全用户界面

基于令牌的单页应用程序(spa)认证

免责声明:我确实在Stormpath工作。我们赞助了Node.js和Java的开源JWT库,可以在这里找到:

https://github.com/jwtk

如果你使用的是AngularJS,我们也会在Stormpath Angular SDK中实现JWT最佳实践

cookie通常用于保护web应用程序。浏览器会自动将它们添加到每个请求中。这使得请求容易受到CSRF攻击。

JWT令牌通常用于保护Web api。令牌在JavaScript中附加到AJAX请求。由于令牌没有自动附加到请求上,因此请求不容易受到CSRF攻击。JWT令牌也可以跨域使用,如果您正在与另一个域的API通信。

JWT令牌也用于本地客户端与web api通信。

相关内容

最新更新