簡體   English   中英

無狀態令牌驗證安全

[英]Stateless Token Auth security

我是ReST的新手,正在實現ReSTful令牌認證,試圖以標准方式在移動Web應用程序中使用Django-Rest-Framework JWT

  • 客戶發送憑證
  • 服務器驗證並發送回令牌和到期日期。 從數據庫中刪除令牌
  • 用戶發出請求且令牌即將到期時,客戶端調用刷新令牌
  • 根據客戶端請求,服務器驗證令牌簽名
  • 過期的令牌移動應用程序注銷用戶。 移動應用檢查到期時間而不是服務器

我決定讓移動應用檢查過期日期,因為我讀到的是ReSTFul,並且服務器檢查它是否要求它存儲不是ReSTful的令牌

關於上述實現,我有一些安全問題:

1)無論刷新多少次令牌,獲取一個令牌都不能使攻擊者完全訪問用戶的登錄信息嗎?

即使通過https,也可以說是某種方式被攻擊者檢索到的令牌,即ssl攔截器代理。顯然,移動應用程序不允許他們登錄,但他們可以通過任何方式調用帶有令牌的api來獲取數據HTTP客戶端。

2)如果服務器認為所有令牌都有效,那么首先具有刷新令牌的目的是什么?

似乎沒有前向安全性,但是,如果服務器存儲了令牌並保留了它們的到期日期,則將停止對用戶的完全損害,但不會阻止每個會話的損害。 顯然,使用SSL攔截器,它們仍然可以危害用戶,但需要捕獲每次登錄。 但是,該實現並不可靠。

首先,過期的令牌是有效的令牌,但是您可以在執行任何操作之前檢查令牌是否過期,並拒絕過期的令牌。 您可以采取幾種措施來提高應用程序的安全性:

  • 您可以在令牌中添加哈希密碼。 因此,如果用戶丟失了手機,則在另一台設備上更改密碼后,您可以拒絕帶有舊密碼哈希的令牌。

  • 這並不完全令人不安,但也沒有那么糟糕:您可以在db中添加一個名為revokedTokens的表,該表可以跟蹤被撤銷的令牌ID(顯然應該將其添加到令牌)中的用戶,如果以后您收到使用該令牌的請求開啟,您可以拒絕它,直到它過期。 當它過期時,您可以從表中刪除它,因為過期的令牌將不再是問題。

  • 您可以在用戶登錄令牌時添加設備的主機名,並將其與請求的主機名進行比較,從而為ssl攔截器攻擊提供額外的安全性。 是的,這不是全面保護,但仍要好一些,因為攻擊者除了需要從其他設備發送令牌之外,還需要更改其主機名。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM