目前我開始拉我的頭髮了這個移動應用程序。我做了一些研究過去的日子裏,似乎我沒有得到相當的點如何實現以下目標:認證具有智威湯遜和刷新令牌
我目前正在建設在Rails的API與移動應用程序客戶端。移動應用程序可以是iOS或Android。現在我正在努力認證。在客戶端登錄設備後,我發出一個短期過期的JWT。所以如果令牌到期,客戶端需要重新登錄,這在我的情況下是不可接受的用戶體驗。無論如何,我覺得我需要有某種期限來防止令牌永久使用,如果它被盜。
現在我不知道如何將刷新令牌整合。我如何確保用戶只有使用已發佈到此確切設備的有效刷新令牌才能獲得新的訪問令牌?還是我過分複雜的事情,並分配一個刷新令牌,可以用於傳輸設備將做的伎倆?
更新:我看了看守門人寶石,它支持密碼授權流程。但門衛處理令牌的方式是,它將每個生成的訪問令牌都存儲在具有相應刷新令牌的數據庫中。當令牌被撤銷或刷新時,舊的訪問令牌會失效 - 隨着時間的推移,這將會變成一個龐大的數據庫表。
此外,我更喜歡使用JWT的道理,所以我沒有存儲任何東西,但在數據庫中刷新令牌。下面的過程是安全的嗎?
- 用戶請求使用用戶名/密碼的訪問令牌 - 我們假設一個設備名稱。
- 服務器發出JWT併爲當前設備創建一個刷新令牌。
- 服務器存儲刷新令牌。
- 當訪問令牌過期後,用戶使用它的刷新令牌請求一個新的。
- 服務器驗證刷新令牌併發出新的訪問令牌。此外,刷新令牌將被替換爲新的令牌。
我對此的疑問:用戶可以在多個設備上登錄,如何區分它們?
其實我不太喜歡只有一個訪問令牌沒有刷新令牌的想法。所以潛在的攻擊者可以用被盜的訪問令牌生成無限的新令牌。此外,我希望儘可能地接近OAuth2規範。 –