iT邦幫忙

0

JWT如何阻止多重登入?

各位前輩大家好,
剛接觸JWT,
目前的理解是這樣的,

登入:
client提供id+password → server接收 → DB驗證 → 生成token → token返回給clinet

使用API:
client提供token → server接收 → 驗證token → 取得id → 當作以此id登入成功 → 後續處理

想要問的是
是不是使用JWT就無法防止多設備同時登入?
以前使用session時,在DB紀錄登入時間,這樣就能防止多重登入了,
據我理解,JWT一大特色就是一次認證後,token過期前不用再使用DB,這樣的話還能阻止多重登入嗎?可以的話要如何實做呢?

謝謝各位。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
石頭
iT邦高手 1 級 ‧ 2018-01-24 14:28:26

第一次登入:
client提供id+password → server接收 → DB驗證 + DB標記JWT有效期限 → 生成token → token返回給clinet

第二次登入:
client提供id+password → server接收 → DB驗證 + 驗證JWT有效期限 -> 告訴使用者此帳號已經登入過

登入的使用者一樣可以藉由JWT資訊 暢遊Server

JWT 最主要是把使用者資訊變成Token給使用者攜帶,為了便利網頁中資訊傳遞,讓Server不用負擔儲存資料的工作

看更多先前的回應...收起先前的回應...
twrichgod iT邦新手 5 級 ‧ 2018-01-24 15:23:57 檢舉

感謝回答,
這樣確實可以防止第二次的登入。

不過若需求是第二次登入時可以正常登入,
但是會強制登出第一次的登入,
這樣有可能實現嗎?

以前的作法是用cookie存登入時間或亂數,
若跟DB資料不一致的話就強制登入。

twrichgod iT邦新手 5 級 ‧ 2018-01-24 15:29:43 檢舉

若跟DB資料不一致的話就強制登「出」。
(不知道為什麼不能編輯...)

石頭 iT邦高手 1 級 ‧ 2018-01-24 16:05:44 檢舉

不過若需求是第二次登入時可以正常登入,
但是會強制登出第一次的登入,
這樣有可能實現嗎?

我想到的做法是

已UserID當鍵 將回傳Token存入DB。
使用者下次請求資料時,判斷DB存入Token是否和目前一致。
如果不一致就把JWT改成無法登入就可以了。

例如:統一把UserID改成 999999 代表 使用者被強制登入

但是如果判斷是否已經登入且要把使用者登出。建議就用Session可能比較方便。
因為Server要記錄使用者登入狀態。跟JWT原本初衷有點背道而馳了。

twrichgod iT邦新手 5 級 ‧ 2018-01-24 18:45:56 檢舉

感謝回答,
看來要達到這個需求還是用Session比較方便。

我要發表回答

立即登入回答