繁體中文(香港)
  • token
  • oidc
  • refresh token
  • rotation
  • security

什麼是刷新令牌輪換及為什麼它很重要?

深入了解並討論為什麼刷新令牌輪換是一種有效保護刷新令牌安全的方法。

Charles
Charles
Developer

Stop wasting weeks on user auth
Launch secure apps faster with Logto. Integrate user auth in minutes, and focus on your core product.
Get started
Product screenshot

什麼是刷新令牌?

刷新令牌是用於在當前訪問令牌過期時獲取新訪問令牌的一種特殊類型的令牌。查看我們之前的文章 了解 OIDC 中的令牌 以了解更多資訊。

在介紹過程中,我們還提到在 Logto,為了保護你的刷新令牌安全,我們默認啟用了“刷新令牌輪換”機制。

但究竟什麼是“刷新令牌輪換”?它如何造福我們的最終用戶?讓我們深入了解!

什麼是刷新令牌輪換?

刷新令牌輪換是一種機制,當刷新令牌被用來獲得新訪問令牌時,使以前的刷新令牌失效並發行新的。此機制確保刷新令牌在過期前得到更新。

為什麼我們需要刷新令牌輪換?

刷新令牌的生命週期較長,通常是以週或甚至月計算。由於我們可以通過刷新令牌獲得新訪問令牌,刷新令牌因此成為攻擊者的誘人目標。因此,根據 OAuth 2.0 BCP,授權服務器必須採取以下措施之一來防止此類攻擊。

  • 發行發送者約束的刷新令牌:客戶端在刷新請求標頭中簽署並提供一個簽名 (Sec-Token-Binding),因此發行的刷新令牌在加密上綁定到特定客戶端。然而,現今只有一些本地客戶端是發送者約束的,大多數現代 SPA 和移動客戶端是公共的。
  • 刷新令牌輪換:授權服務器發行新刷新令牌(通常在兌換新訪問令牌時)並使以前的失效。這降低了令牌洩漏的風險。

實施刷新令牌輪換的最佳實踐

在 Logto 中,當用戶成功登入時,會首先在資料庫中創建一個 Grant 對象,隨後發行的刷新令牌將有一個引用 grantId,並指向最初的 Grant 對象。

每當發生刷新令牌輪換時,先前的刷新令牌將被標記為已使用,Logto 授權服務器將發行具有相同 grantId 的新刷新令牌。

假設之前的刷新令牌洩露,那麼不管合法客戶端還是攻擊者都會使用它來兌換訪問令牌。無論是誰,洩漏的刷新令牌一定已經被輪換並標記為已使用。使用過的消耗令牌的其中之一會通知授權服務器出現了違規。授權服務器將撤銷所有具有相同 grantId 的刷新令牌。

在上述情況下,觸發警報後,合法客戶端只能通過重新登入流動再次獲取新刷新令牌。而攻擊者則會失去對系統的控制並被阻止在外。

什麼時候發生刷新令牌輪換?

在 Logto 中,刷新令牌輪換的默認行為定義為:

  • 如果客戶端是發送者約束的或非公共的(例如,服務器端渲染網絡應用程序),則刷新令牌輪換會發生在其總生存時間(TTL)的 70% 時到達。
  • 如果客戶端是公共客戶端(例如,單頁網絡應用),刷新令牌輪換每次被用於兌換訪問令牌時都會發生。令牌交換的響應會返回一個新的訪問令牌和一個新的刷新令牌。

如何在 Logto 中啟用或禁用刷新令牌輪換?

在 Logto 管理控制台中,轉到 管理控制台 > 應用程序 並選擇你想要切換刷新令牌輪換的應用程序。在應用程序詳細資訊頁面中,轉到“高級設置”選項卡,滾動到頁面底部,你會找到開關以及其他一些有用的設置。

應用詳情

如果你關閉開關,你的刷新令牌將永遠不會被輪換,直到它過期。因此,我們強烈建議始終啟用刷新令牌輪換。

回顧:什麼是刷新令牌輪換及為什麼它很重要?

刷新令牌輪換是一種最佳實踐,它確保你的應用程序中的刷新令牌安全。當刷新令牌被用於獲得新的訪問令牌時,它會使以前的刷新令牌失效並發行新的。這一機制減少了令牌洩漏的風險,並確保你的刷新令牌安全。

Logto 遵循行業領先的最佳實踐,並始終將用戶安全置於最高優先級。

我希望這篇博客能很好地解釋你對刷新令牌輪換機制的疑問。如果還有什麼不清楚的地方,請讓我們知道。你的反饋和建議總是受到歡迎!

立即嘗試 Logto,擁抱更安全的身份驗證體驗。