2015-04-03 98 views
8

我即將在使用Django Rest Framework的API中實現令牌認證。 但我不知道我是否應該使用基本令牌內置的DRF或使用JSON網絡令牌(JWT)標準(採用這種封裝形式djangorestframework-jwt) ,我發現是在DRF文檔的唯一參考:我應該在Django Rest Framework中使用JWT還是Basic Token身份驗證?

與內置TokenAuthentication方案不同,JWT身份驗證 不需要使用數據庫來驗證令牌。

是否有其他的差異,優點或缺點需要考慮?

注:API是會從網站(使用angularjs)訪問和移動應用

回答

10

當電流令牌授權機制看,我會建議使用JWT令牌,與平臺無關。 JWT令牌包含所有的聲明,並且可以安全地在客戶端解碼。這意味着您不僅可以接收不透明的令牌,而不會向客戶端提供任何信息,您可以在令牌中存儲聲明並在客戶端解碼以構建您的界面。 JWT令牌是無狀態的,因此您不需要存儲或跟蹤它們的服務器端,如果您擴展到多個服務器,這是有益的。它們也是安全的,因爲您存儲了私人簽名密鑰服務器端,從而可以確保進入API的任何調用都使用授權API發出的有效令牌。

JWT代幣與Angular客戶打得非常好。因爲他們是JSON,所以你可以在你的Angular客戶端解碼他們,甚至直接綁定客戶端的UI元素到你的聲明(有管理員聲明的人可以看到一個管理菜單和一個用戶沒有聲明永遠不會知道菜單存在,如果實施正確) 。

除此之外,JWT令牌的行爲方式與任何持證者令牌(由auth api發佈,由客戶端存儲,傳遞給授權頭中的資源api)的行爲相同,因此實際上沒有任何缺點使用它,I可以想到。

總之,如果您實施JWT令牌,則在客戶端和服務器之間來回更少,並且在擴展時的工作量更少。

2

智威湯遜:有它可以要求的東西(類似於金錢購買時的東西)

  1. Any客戶
  2. 沒有數據庫查找曾經發 - 嵌入式到期使然驗證

JWT有到期日,直到那個時候,它仍然有效。當您需要通過密碼重置或強制註銷用戶時,這可能是不可取的。

令牌黑名單可能用於解決上述問題。這將重新引入JWT試圖避免的持久或內存跟蹤。但是,跟蹤將僅在選定的密鑰上進行,而基本令牌驗證則是針對所有用戶的跟蹤。

任何擁有它的人都可以解碼JWT。因此需要注意包裝在令牌中的信息。另一方面,基本身份驗證令牌只是一個簡單的哈希,它可以看作是對用戶的引用。

考慮到緩存和其他性能增強功能,人們可能不需要擔心開銷,但是流程的便利性和未來的驗證。

無論是否使用JWT +黑名單或基本令牌身份驗證,完全控制身份驗證,授權和失效都是件好事。

因此,基本認證令牌may會更好,如果流量是自定義的以滿足需求。