我有一個基於Koa的Node.js後端,用於我的個人/業餘愛好應用程序。處理JWT過期和智威湯遜負載更新
我用JWT令牌實現了會話處理。客戶端(AngularJS)在成功登錄後獲取令牌並將令牌存儲在某處(目前在sessionStorage
中,但對於此問題而言,這應該不重要)。
我有兩個問題:
當我需要更新其JWT表示,比方說,用戶打開2FA於是我問他提供他的電話號碼,我想用戶記錄在用戶記錄中設置此電話號碼。目前,在成功驗證電話號碼後,我打電話給後臺更新用戶記錄,並使用更新後的用戶記錄創建了新的JWT令牌(我從JWT令牌中排除了敏感信息,例如哈希密碼,但我想包括客戶端使用的電話號碼)。當某些憑證更改並使用此新令牌更新現有客戶端令牌時,是否可以創建新令牌?我是否永遠不會創建另一個令牌,只有在成功驗證後才創建一個令牌?我如何更新令牌中的有效載荷?
我應該如何處理過期的JWT令牌?在我看來,我有3個(可能的)場景:
2.1。智威湯遜設置爲短暫的生活,比如15分鐘。如果後端服務器回覆401 Unauthenticated'Invalid token'(我猜這是
koa-jwt
的默認行爲),那麼我會自動註銷我的客戶端並要求重新驗證。但我也建立了一個互補的中間件,它是後端鏈中的最後一個,用重新刷新的到期來重新創建令牌,並且客戶端也會用已刷新的令牌替換現有的令牌。因此,如果用戶處於活動狀態並在每個受保護的API調用中使用該應用程序,那麼在成功的情況下,將創建一個新的令牌來替換舊的令牌。2.2。 JWT設置時間長,例如1周,如果到期,我會選擇從客戶端重新進行身份驗證。
2.3。複製https://tools.ietf.org/html/rfc6749#section-1.5。在成功驗證後創建JWT令牌時,我們發送access_token以及refresh_token。當access_token過期並且服務器以HTTP 401'無效令牌'響應(默認爲
koa-jwt
)時,客戶端將refresh_token發送到支持者以要求新的access_token(以及可選的新的refresh_token)。在這種情況下,我不完全瞭解refresh_token如何通過舊的access_token驗證以提供新的令牌?或者爲什麼我們需要有一個refresh_token?
關於上層主題(JWT更新和JWT到期)的任何通用建議將會有所幫助。
爲什麼不只是使用cookie? – Kebman