JWT 和签名 cookie 有什么区别?
What is the difference between JWT and signed cookies?
我正在调查 JWT as an alternative to traditional sessions with cookies but I fail to see how they differ fundamentally from signed cookies that for example Express is offering through middleware like cookie-parser。
在两者中,最后一部分是有效载荷的签名,保证有效载荷未被篡改。
签名的 cookie:
user=tobi.CP7AWaXDfAKIRfH49dQzKJx7sKzzSoPq7/AcBBRVwlI3
等效的 JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiVG9iaSJ9.kCTlR_Igb4H5cqBEDedShM2ivSQijPQkWqN4pZAXb2g
除以下事实外:
(1) JWT 没有来源限制,
(2) cookie 内容立即 human-readable,而 JWT 内容(header + 有效负载)是 base64 编码
与签名 cookie 相比,JWT 有什么明显的优势吗?
Cookie 通常用于保护 Web 应用程序。浏览器会自动将它们添加到每个请求中。这使得请求容易受到 CSRF 攻击。
JWT 令牌通常用于保护 Web API。令牌附加到 JavaScript 中的 AJAX 请求。由于令牌不会自动附加到请求,因此请求不容易受到 CSRF 攻击。如果您正在与之交谈的 API 在另一个域中,JWT 令牌也可以用于跨源。
JWT 令牌也用于本机客户端与 Web APIs 通信。
注意不要混淆问题:cookie 主要是一种在客户端存储数据的机制,它们本身并不是一种身份验证机制 - 但我们以这种方式使用它们:)
JWT 的主要好处是声明的结构(JSON,具有公共字段)和声明的签名机制。这只是规范,没有什么特别之处。但是有一种通用的方式来持久化身份断言是件好事。
您仍然需要以安全的方式存储您的 JWT,带有 HttpOnly; Secure
的 cookie 是最佳选择。这可以防止 cookie 被 Java 脚本环境读取,从而防止 XSS 攻击。
我写了一些关于 JWT 的博文,它们包含更多有助于回答您的问题的信息:
Build Secure User Interfaces Using JSON Web Tokens (JWTs)
Token Based Authentication for Single Page Apps (SPAs)
免责声明:我在 Stormpath 工作。我们赞助 Node.js 和 Java 的开源 JWT 库,可在此处找到:
如果您使用的是 AngularJS,我们还通过我们的 Stormpath Angular SDK
实现开箱即用的 JWT 最佳实践
我正在调查 JWT as an alternative to traditional sessions with cookies but I fail to see how they differ fundamentally from signed cookies that for example Express is offering through middleware like cookie-parser。
在两者中,最后一部分是有效载荷的签名,保证有效载荷未被篡改。
签名的 cookie:
user=tobi.CP7AWaXDfAKIRfH49dQzKJx7sKzzSoPq7/AcBBRVwlI3
等效的 JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiVG9iaSJ9.kCTlR_Igb4H5cqBEDedShM2ivSQijPQkWqN4pZAXb2g
除以下事实外:
(1) JWT 没有来源限制,
(2) cookie 内容立即 human-readable,而 JWT 内容(header + 有效负载)是 base64 编码
与签名 cookie 相比,JWT 有什么明显的优势吗?
Cookie 通常用于保护 Web 应用程序。浏览器会自动将它们添加到每个请求中。这使得请求容易受到 CSRF 攻击。
JWT 令牌通常用于保护 Web API。令牌附加到 JavaScript 中的 AJAX 请求。由于令牌不会自动附加到请求,因此请求不容易受到 CSRF 攻击。如果您正在与之交谈的 API 在另一个域中,JWT 令牌也可以用于跨源。
JWT 令牌也用于本机客户端与 Web APIs 通信。
注意不要混淆问题:cookie 主要是一种在客户端存储数据的机制,它们本身并不是一种身份验证机制 - 但我们以这种方式使用它们:)
JWT 的主要好处是声明的结构(JSON,具有公共字段)和声明的签名机制。这只是规范,没有什么特别之处。但是有一种通用的方式来持久化身份断言是件好事。
您仍然需要以安全的方式存储您的 JWT,带有 HttpOnly; Secure
的 cookie 是最佳选择。这可以防止 cookie 被 Java 脚本环境读取,从而防止 XSS 攻击。
我写了一些关于 JWT 的博文,它们包含更多有助于回答您的问题的信息:
Build Secure User Interfaces Using JSON Web Tokens (JWTs)
Token Based Authentication for Single Page Apps (SPAs)
免责声明:我在 Stormpath 工作。我们赞助 Node.js 和 Java 的开源 JWT 库,可在此处找到:
如果您使用的是 AngularJS,我们还通过我们的 Stormpath Angular SDK
实现开箱即用的 JWT 最佳实践