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?
谨防混杂的担忧:cookie主要是一种用于在客户端上存储数据的机制,它们本身并不是一种身份验证机制-但是我们以这种方式使用它们:)
JWT的主要好处是声明的结构(JSON,具有公共字段)和声明它们的机制。这只是规范,没有什么特别的。但是,有一种通用的方法可以持久保存身份声明。
您仍然需要以安全的方式存储JWT,并且cookie HttpOnly; Secure是最佳选择。这样可以防止Cookie被JavaScript环境读取,从而防止XSS攻击。
我写了一些有关JWT的博客文章,其中包含更多信息,这些信息将有助于回答您的问题:
免责声明:我确实在Stormpath工作。我们赞助Node.js和Java的开源JWT库,可在以下位置找到:
如果您使用的是AngularJS,我们还将通过Stormpath Angular SDK开箱即用地实现JWT最佳实践