JWT和签名cookie有什么区别?

Tha*_* K. 6 authentication cookies session express jwt

我正在研究JWT作为使用cookie的传统会话的替代方案,但是我没有看到它们与签名的cookie有什么不同,例如Express通过像cookie-parser这样的中间件提供.

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

签名cookie:

user=tobi.CP7AWaXDfAKIRfH49dQzKJx7sKzzSoPq7/AcBBRVwlI3 
Run Code Online (Sandbox Code Playgroud)

等效JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiVG9iaSJ9.kCTlR_Igb4H5cqBEDedShM2ivSQijPQkWqN4pZAXb2g
Run Code Online (Sandbox Code Playgroud)

除了以下事实:

(1)JWT没有原产地限制

(2)cookie内容立即是人类可读的,而JWT内容(头部+有效载荷)是base64编码的

有什么能让JWT明显优于签名的cookie?

rob*_*tjd 5

谨防混杂的担忧:cookie主要是一种用于在客户端上存储数据的机制,它们本身并不是一种身份验证机制-但是我们以这种方式使用它们:)

JWT的主要好处是声明的结构(JSON,具有公共字段)和声明它们的机制。这只是规范,没有什么特别的。但是,有一种通用的方法可以持久保存身份声明。

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

我写了一些有关JWT的博客文章,其中包含更多信息,这些信息将有助于回答您的问题:

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

单页应用程序(SPA)的基于令牌的身份验证

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

https://github.com/jwtk

如果您使用的是AngularJS,我们还将通过Stormpath Angular SDK开箱即用地实现JWT最佳实践