2015-07-20 76 views
3

我正在研究JWT作爲使用cookie的傳統會話的替代方案,但我無法從根本上看出它們與簽名cookie之間的差異,例如Express通過中間件cookie-parser提供。智威湯遜和簽名餅乾有什麼區別?

在這兩者中,最後一部分是有效載荷的簽名,它保證有效載荷未被篡改。

簽名的cookie:

user=tobi.CP7AWaXDfAKIRfH49dQzKJx7sKzzSoPq7/AcBBRVwlI3 

等效JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiVG9iaSJ9.kCTlR_Igb4H5cqBEDedShM2ivSQijPQkWqN4pZAXb2g 

除了事實:

(1)智威湯遜不附帶原產地限制和

(2)cookie內容立即可以被人閱讀,而JWT內容(header + paylo廣告)是base64編碼

有沒有什麼可以讓JWT比已簽名的cookies有明顯的優勢?

回答

3

謹防混合的擔憂:餅乾是主要用於存儲客戶端數據的機制,他們不是天生的認證機制 - 但是我們用他們的方式:)

JWTs的主要好處是聲明的結構(JSON,帶有公共字段)以及爲其簽名的聲明機制。這只是規範,沒有什麼特別的。但擁有持久的身份斷言的常用方式是很好的。

您仍然需要以安全的方式存儲您的JWT,並且使用HttpOnly; Secure的Cookie是最佳選擇。這可以防止JavaScript環境讀取cookie,從而防止XSS攻擊。

我已經寫JWTs一些博客文章,它們含有更多的信息,這將有助於回答你的問題:

Build Secure User Interfaces Using JSON Web Tokens (JWTs)

Token Based Authentication for Single Page Apps (SPAs)

聲明:我在Stormpath做的工作。我們贊助Node的開源JWT庫。js和Java,它可以在這裏找到:

https://github.com/jwtk

如果使用AngularJS,我們還實現了JWT最佳實踐開箱即用我們Stormpath Angular SDK

2

Cookie通常用於保護Web應用程序。瀏覽器會自動將它們添加到每個請求中。這使得這些請求容易受到CSRF攻擊。

JWT令牌通常用於保護Web API。令牌附加到JavaScript中的AJAX請求。由於令牌未自動附加到請求,因此該請求不容易受到CSRF攻擊。 JWT令牌也可以用於交叉來源,以防您正在與之通話的API位於另一個域中。

JWT令牌也用於本地客戶端以與Web API交談。