我正在尋找一種在帶有 Dotnet Core 后端的簡單 SPA 上正確實作重繪 和訪問令牌的方法。我對它的了解越多,我似乎就越擔心它對服務器性能的影響,尤其是隨著登錄用戶數量的增長。
以這個
特別是,授權服務器:必須在每次使用時輪換重繪 令牌,以便能夠在重放時檢測到被盜的重繪 令牌(在 [oauth-security-topics] 4.12 節中描述)
Now given that we want to keep the Access token expiry time limited (e.g. 10-20 minutes) and we need to persist every refresh token which we generate in order to recognize malicious activity of old refresh token being reused.
Which means that every 20 minutes n users hit our backend to refresh Access token and create a new refresh token, so for 1k logged in users that`s 1k requests every 20 minutes, also for each of those users our api checks if refresh token they have presented has been already invalidated, if not, we persist the new refresh token.
Hence after a day of user being logged in, we saved: 24 * 60 / 20 = 72 different refresh tokens .. and now we check every user against every single one ??
Am I missing something, how is this scalable?
uj5u.com熱心網友回復:
您實際上不需要存盤曾經制作的每個重繪 令牌。您只需要一個已使用令牌的串列來檢查您的用戶嘗試重繪 的令牌是否被重用,并且由于您的重繪 令牌應該像您的訪問令牌一樣具有到期時間,因此您也不需要存盤令牌,甚至用過的,比他們的壽命長。
- 如果用戶嘗試使用有效的重繪 令牌:它沒有過期并且不在您使用的令牌串列中。好走!
- 如果用戶嘗試使用過期的令牌:它已過期,因此無需擔心重用,無需檢查資料庫中已使用的令牌。
- 如果用戶嘗試重用有效的重繪 令牌:它在您的串列中。
因此,雖然它確實隨著用戶數量而擴展,但隨著時間的推移它是穩定的,并且不會超出比例(在你確實清除舊令牌的條件下)。
還有其他事情需要考慮。正如在另一個 auth0 帖子中提到的,在重用的情況下,您希望使整個令牌系列無效,而不僅僅是拒絕訪問重用令牌的一個用戶(它可能是合法用戶)。再說一次,您不需要存盤令牌系列中的每個令牌來跟蹤需要失效的內容:您只需向令牌添加一個系列識別符號,將該系列識別符號本身標記為無效以防重復使用,如果它們屬于無效的系列,則拒絕未來的重繪 嘗試。失效家族的串列以及所有失效時間超過重繪 令牌壽命的家族識別符號都可以被清除。
在服務器請求方面,與 API 密鑰或 HTTP 基本身份驗證等其他授權方式相比,重繪 令牌應該是凈性能提升,因為對于您必須發出的每個重繪 令牌,您還將獲得 20 分鐘的請求您不必查詢資料庫來檢查 API 密鑰是否仍然有效,或者提供的密碼是否正確(特別是因為像 bcrypt 這樣的良好密碼散列函式故意很慢)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/455176.html
標籤:security authentication oauth-2.0 jwt
上一篇:使用Rfc2898DeriveBytes時密碼哈希應該是多少位元組?
下一篇:包含位域的結構的大小
