為何需要Refresh Token?

  • 如果長時間使用同個Token,駭客可能竊取Token濫用它,因此長時間不變更Token是很不安全的
  • 當access Token過期時,可以使用Refresh Token從身份驗證獲取新的access Token
  • Refresh Token 的生命週期比access Token還要長

JWT 是一種 Bearer Token

  • 因此在Authorization帶入 Authorization: ‘Bearer ’ + token

運作機制

  • 將生成的Refresh Token以及過期時效儲存在資料庫中,Refresh Token只有在申請新的Access Token時才會驗證,所以將Refresh Token儲存在資料庫中,不會對業務接口響應時間造成影響,也不需要像Session一樣一直保持在內存中以應對大量的請求。
  • 提供server端禁用用戶Token的方式,當用戶登出或禁用用戶時,只需要將server端的Refresh Token禁用或刪除,用戶就會在Access Token過期後,由於無法獲取到新的Access Token,再也無法訪問需認證的接口,如下圖的架構 : refreshtoken

實作流程

  • 必要的NuGet套件
    • Microsoft.EntityFrameworkCore.SqlServer
    • Microsoft.EntityFrameworkCore.Tools
    • Microsoft.AspNetCore.Identity.EntityFrameworkCore
    • Microsoft.AspNetCore.Authentication.JwtBearer

(待後續補足… 很多流程其實都跟參考資料一樣)

參考資料

https://www.c-sharpcorner.com/article/jwt-authentication-with-refresh-tokens-in-net-6-0/ https://zhuanlan.zhihu.com/p/52300092