我有一個RESTful API,這將是用戶將通過一組Web /移動客戶端達到,我想弄清楚如何處理令牌身份驗證。我的理解是,傳統的令牌身份驗證的工作原理如下:基於令牌的身份驗證的替代方法
- 用戶auths中通過提供用戶名/密碼,接收回令牌和到期
- ,直到令牌傳遞的每個請求
- 到期後,新的請求令牌(通過提供單獨的「刷新」令牌或僅通過用戶/通過重新認證)
是否有一個很好的理由不爲每個請求生成新的令牌?即:通過用戶/密碼請求初始令牌。該令牌與第一個API請求一起傳遞,該請求返回api響應的內容以及必須通過以下請求傳遞的新令牌...此方法的優點是每個請求(操作)重置'令牌auth的到期,使得令牌到期時間基本上變成用戶可以不註銷而不活動的時間段。有沒有一個很好的理由不使用這種方法?上面列出的方法似乎更常見(這就是爲什麼我問)。
最後,只有一個稍微相關的問題。阻止正在觀看網絡的人從用戶那裏獲取令牌?特別是在第一種方案中,似乎很容易做到(在第二種方法中,您需要捕獲傳入的請求,然後在用戶執行操作之前快速獲取下一個令牌)。
我正在使用python w/itsdangerous TimedJSONWebSignatureSerializer(一個JSON Web簽名實現)。所以不,我不認爲我正在使用數據庫來存儲令牌。並且因爲過期是令牌的一部分,所以不能擴展它(您會得到一個新令牌)。澄清:API的'用戶'是我自己的(最終用戶不打算直接使用API,只使用其中一個客戶端應用程序)。所以我最關心的是這種方法對安全性的影響。 – guywhoneedsahand
此外,「標準」模型中到期的原因是,客戶可以知道何時請求新的令牌而不必擊中資源,由於認證失敗(令牌過期)而被拒絕,然後請求新鮮令牌。那有意義嗎?很顯然,在滑動認證窗口中,這不是必需的(這也是爲什麼它看起來像個好主意!) – guywhoneedsahand
將過期發送給客戶端的確可以傳達關於何時請求新令牌的信息。但不應該以客戶可以改變它的方式使用它。 在JWT無法完成的情況下,這確實是一種替代方法。 由於您是API的唯一用戶,因此您當然應該如何處理即將到期的令牌。無論如何你都需要做點什麼。但是定期請求新令牌會更容易嗎?保持一切美好和分離。 – harm