簡體   English   中英

Laravel 5:使用Laravel會話數據進行Socket.io客戶端身份驗證

[英]Laravel 5: Socket.io client authentication using Laravel session data

我想根據Laravel創建的客戶端會話數據對socket.io客戶端進行身份驗證。

我想到的是:

A - 從客戶端向服務器發送用戶名和電子郵件;

B - 用戶登錄后在我的socket.io服務器需要的數據中存儲我的socket.io服務器需要的數據,然后根據會話cookie id在Node.js中讀取它。 如果我更喜歡這種方法sessionId -> "email, name"我可能必須在Redis中存儲sessionId -> "email, name"

C - 在Laravel中使用Redis會話驅動程序,解碼由Laravel設置的cookie,從Node.js訪問Laravel會話值,反序列化和解碼它們;

方法A顯然非常不安全,只能用於證明概念。

方法C似乎更好,因為我不必復制或管理會話數據,而只是解碼它。 然而,這種方式將我的應用程序與Laravel托管會話的實現細節相結合,因此似乎不合適。

方法B看起來更有前景,實施起來更簡單。 但是,使用方法B意味着我必須自己管理一些會話數據,以便socket.io能夠讀取它。 這樣做可能會使我在Redis中存儲的Laravel會話數據和會話數據相互不一致,這將在某個時間點發生。 在某些極端情況下,例如,可以重用過期的會話ID,並且某些socket.io客戶端將被錯誤地作為另一個用戶進行身份驗證。 我現在無法想到更簡單的案例,但由於這種不適應性,我認為可能存在這樣的情況,安全性和用戶體驗都可能受到損害。

什么是基於socket.io應用程序中的Laravel會話數據實現用戶身份驗證的更優雅,健壯和安全的方法? 如果沒有明顯更好的方法,我認為方法B是最好的,我可以做些什么來提高我使用Redis和Laravel會話數據管理的會話數據之間的一致性。

就我總結而言,重點實際上是訪問Laravel和php之外的Laravel會話數據,並通過sessionId,email和username識別客戶端。

我建議你使用JSON Web Token身份驗證。

JSON Web Token(JWt)是一種相對較新的令牌格式,用於空間受限的環境,例如HTTP Authorization標頭。 JWT的架構是一種基於各方之間轉移安全聲明的方法。 有關JWT的更多詳細信息

使用Laravel最簡單的方法是使用像這樣的包。 或者你可以由yourserlf實現它。

使用JWT auth,您將能夠從令牌訪問用戶。 例如:

$user = JWTAuth::parseToken()->toUser();

有關如何使用'jwt-auth'的詳細信息,請查看此處

正如Alexandros已經指出的那樣,你應該使用JWT。

使用socket.io驗證JWT是一件輕而易舉的事。 您可以使用socketio-authjsonwebtoken本文中非常好地描述來驗證您的用戶。 此外,您可以使用dotenv從Laravel .env文件中讀取簽名標記的密鑰。

對我來說它工作得很好,雖然你必須考慮令牌的失效。 在Laravel中,jwt-auth通過使用黑名單來解決這個問題。 因此,在您的節點服務器中,您必須自己處理。 或者保持提升時間。

大約一年前,我找到了一個很好的解決方案。 我決定把它變成一個模塊,它非常容易使用。 幫助您獲得cookie而無需對其進行硬編碼。 幫助您獲得該會話ID並從mysql和redis中檢索它

https://www.npmjs.com/package/node-laravel-session

這樣你就可以分享你所有的會話。 您還可以利用會話以便將用戶注冊到某些房間

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM