ASP.NET 身份承載令牌與 JWT 的優缺點
我使用 ASP.NET Identity 已經有一段時間了,並且一直在研究 JWT(JSON Web Token),因為它們看起來非常有趣且易於使用。
JWT.IO有一個很好的調試令牌的範例/工具。
但是,我不完全確定 JWT 在後端是如何工作的,你還會使用 Identity 嗎?
令牌(Bearer vs JWT)如何比較?哪個更安全?
JWT 就像是景點的門票。它包含伺服器需要嵌入其中的所有安全資訊。一旦伺服器將其分發出去,客戶端只需要在它要求某些東西時呈現它,如果它是有效的,伺服器就會做出相應的響應。
內容是完全可見的,但它們是由伺服器使用密鑰簽名的,因此它可以判斷它們是否已被篡改。
由於一切都在 JWT 中,並且客戶端可以將它呈現給他們想要的任何人,因此您可以將它用於單點登錄,只要不同的伺服器共享相同的秘密,以便他們可以驗證簽名。
與票一樣,JWT 也有到期日。只要它沒有過期,它就是有效的。這意味著您不能在此之前撤銷它們。出於這個原因,JWT 的到期時間通常很短(30 分鐘左右),並且客戶端也會收到一個刷新令牌,以便在 JWT 到期時快速更新它。
智威湯遜
- 不儲存在伺服器上
- 非常適合 SSO
- 不能提前撤銷
不記名令牌就像一個客人名單。伺服器將客戶端放在來賓列表中,然後提供密碼以在需要時辨識它。當客戶端提供程式碼時,伺服器在列表中查找它並檢查它是否被允許做它所要求的任何事情。
伺服器必須擁有可用的列表,因此如果您想跨伺服器共享訪問權限,它們要麼都需要能夠訪問列表(數據庫),要麼與擁有它的某些權限(身份驗證伺服器)對話。
另一方面,由於他們有客人名單,他們可以隨時將您從名單中刪除。
不記名令牌
- 儲存在伺服器上
- 可以隨時撤銷
- 需要中央授權或共享數據庫在伺服器之間共享令牌
如果你想走這條路,Bit of Tech 有一些關於使用 Web Api 實現 JWT 的優秀教程。
<http://bitoftech.net/2015/02/16/implement-oauth-json-web-tokens-authentication-in-asp-net-web-api-and-identity-2/>