3
我們當前的應用程序使用HTTP會話,我們希望用JWT替換它。每個用戶JWT和一個(!)會話/無併發會話
該設置允許每個用戶只有一個會話。這意味着:在
- 用戶標誌在設備1個
- 用戶在設備1(創建新會話)在設備2
- 用戶是
- 用戶標誌記錄在在設備2(創建新會話)時登錄
- 用戶爲而不是在設備1登錄(會話被破壞)
- 用戶在設備1(創建新會話)在設備2
這工作,因爲有會話ID和用戶ID之間的服務器端的關係。
使用JWT我能想象到有用戶數據庫裏面的一些櫃檯,而它與每一個登錄增加,即:在設備1
- JWT令牌簽名包含
- 用戶跡象計數器+ 1(並保存新的計數器到數據庫)
- JWT的簽名包含counter + 1,它會增加並保存到db。現在
每個請求我要檢查如果傳入的簽名是否爲當前計數器值正確。
這不知何故使它有狀態。 :(
但是... JWT的一個好處是,無需訪問任何數據庫或會話存儲以驗證令牌。
是否有其他解決方案來防止併發登錄?也許有些東西沒有數據庫訪問,並保持無狀態?
您可以在JWT簽名並向客戶端發送JWT時在JWT中創建自定義聲明。當他們將令牌發回給您時,請確認例如'device_id'等具體聲明沒有改變。這有點棘手,但你可能不得不在服務器端的會話上做一些工作,即使你試圖避免這種情況。 – Signus 2015-06-03 22:37:35