我想基於由Laravel創建的客戶端的會話數據socket.io端進行身份驗證。Laravel 5:使用Laravel會話數據Socket.io客戶端身份驗證
我所想的是:
A - 發光的用戶名和電子郵件從客戶端到服務器;
乙 - 存儲在Redis的PHP用戶登錄後在我socket.io服務器需要的數據,然後基於會話cookie ID閱讀它的Node.js。 如果我更喜歡這種方法,我可能需要在Redis中存儲sessionId -> "email, name"
。
Ç - 使用Redis的會話駕駛員Laravel,解碼由Laravel設置cookie,訪問來自Node.js的,反序列化Laravel會話值和解碼它們;
方法A顯然非常不安全,只能用於證明概念。
方法C似乎更好,因爲我不必複製或管理會話數據,但只能解碼它。然而,這種方式將我的應用程序與Laravel管理會話的實現細節結合起來,因此似乎不合適。
方法B看起來更有希望,實現更簡單。 但是使用方法B意味着我必須自己管理一些會話數據,以便socket.io能夠讀取它。這樣做可能會使我在Redis中存儲的Laravel會話數據和會話數據相互不一致,並且這會在某個時間點發生。例如,在某些極端情況下,可能會重用過期的會話標識,並且某些socket.io客戶端將被錯誤地認證爲另一個用戶。我現在無法想到更微不足道的情況,但是由於這種趨勢,我認爲有可能存在這種情況,安全性和用戶體驗都會受到影響。
什麼是更優雅,穩健和安全的方式來實現socket.io應用基於Laravel會話數據的用戶認證?如果沒有更好的方法,我認爲方法B是最好的,我可以做些什麼來提高會話數據之間的一致性,我使用Redis和Laravel會話數據進行管理。
就我可以總結而言,整點實際上是訪問Laravel和php之外的Laravel會話數據,並通過sessionId,電子郵件和用戶名來識別客戶端。
這似乎比我想象的要好得多。我閱讀了關於智威湯遜的想法。如果你稍微擴展你的答案並解釋爲什麼JWT可以很好地用於認證socket.io客戶端(以防其他人有相同的問題),那將是非常好的。 –
我剛剛添加了更多關於JWT的信息。 –