Laravel 5:使用Laravel会话数据进行Socket.io客户端身份验证

Bor*_*rov 7 php authentication node.js socket.io laravel

我想根据Laravel创建的客户端会话数据对socket.io客户端进行身份验证.

我想到的是:

A - 从客户端向服务器发送用户名和电子邮件;

B - 用户登录后在我的socket.io服务器需要的数据中存储我的socket.io服务器需要的数据,然后根据会话cookie id在Node.js中读取它.sessionId -> "email, name"如果我更喜欢这种方法,我可能不得不在Redis中存储.

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识别客户端.

Ale*_*dis 7

我建议你使用JSON Web Token身份验证.

JSON Web Token(JWt)是一种相对较新的令牌格式,用于空间受限的环境,例如HTTP Authorization标头.JWT的架构是一种基于各方之间转移安全声明的方法.有关JWT的更多详细信息

使用Laravel最简单的方法是使用像这样的包.或者你可以由yourserlf实现它.

使用JWT auth,您将能够从令牌访问用户.例如:

$user = JWTAuth::parseToken()->toUser();
Run Code Online (Sandbox Code Playgroud)

有关如何使用'jwt-auth'的详细信息,请查看此处.

  • 这看起来比我想象的要好得多.我读到了JWT,我明白了.如果你稍微扩展你的答案并解释为什么JWT可以很好地验证socket.io客户端(如果其他人有相同的问题),那将是很好的. (2认同)