2017-08-31 287 views
1

我們已決定使用OAuth2從Hazelcast共享會話切換到無狀態JWT身份驗證/授權,並發現了一個不適合我們下面描述的基礎架構的問題。如何使用OAuth2靜默刷新過期的JWT令牌?

Current Hazelcast shared session

所以我們有可能通過直接鏈接訪問多個自足系統(SCS)即mysite.com/scs1mysite.com/scs2

Stateless JWT so called Session

每個特戰隊都有它自己的UI和後端,但「會議」(通過無狀態JWT授權實現)必須是跨越多個scs'es有效。

OAuth2 Authorizaion Server是一個專用服務器(UAA)。 在OAuth2術語中,每個scs都是資源服務器。

我們假設用戶已經登錄到scs1(通過UAA)並獲得了TTL = 10分鐘的JWT和TTL = 30分鐘的RefreshToken。然後他在瀏覽器中離開該標籤15分鐘。 JWT到期,但該選項卡仍包含前一頁scs1。然後用戶點擊該頁面上的鏈接mysite.com/scs3

scs3收到一個請求,檢查JWT並發現它已過期。但是我們有一個RefreshToken(仍然活着15分鐘),可以刷新智威湯遜。

是否有可能從scs3返回響應,要求瀏覽器轉到UAA並默默刷新JWT?

JWT has expired

也許某種重定向與添加RefreshToken頭的能力/ UAA /授權?

回答

1

我們終於找到了在我們的例子中如何處理令牌刷新。

JWT具有TTL = 10分鐘 RefreshToken具有TTL = 30分鐘

JavaScript中,嵌入我們網站的每個頁面刷新JWT各8-9分鐘。所以當用戶在他的瀏覽器中有一個打開的選項卡時,刷新過程將無縫地發生。

一角的情況是當用戶:

  1. 打開標籤mysite.com/scs1
  2. 日誌中
  3. 關閉選項卡
  4. 等待15分鐘。 JWT過期,RefreshToken仍然活着。
  5. 打開新的標籤頁,並進入mysite.com/scs1或SCS2等

此時後端只接收JWT其過期。 因此,BackEnd將用戶重定向到專用的網頁/嘗試刷新?URI = mysite.com/SCS1

  • 試穿刷新頁面包含只有JavaScript其中嘗試刷新令牌和在成功的情況下的用戶重定向回從URI參數
  • 解決