我想根据Laravel创建的客户端会话数据对socket.io客户端进行身份验证。
我想到的是:
从客户端发送到服务器的用户名和电子邮件;
B-在用户登录后,将我的socket.io服务器需要的数据存储在php中的Redis中,然后根据会话cookie id在Node.js中读取数据。如果我喜欢这种方法,我可能不得不将sessionId -> "email, name"
存储在Redis中。
使用Laravel中的Redis会话驱动程序,解码Laravel设置的cookie,从Node.js访问Laravel会话值,对其进行非序列化和解码;
方法A显然非常不安全,只能用来证明概念。
方法C似乎更好,因为我不必复制或管理会话数据,而只需要对其进行解码。然而,这种方式将我的应用程序与Laravel管理会话的实现细节结合起来,因此似乎不合适。
方法B看起来更有希望,实现起来也更简单。但是,使用方法B意味着我必须自己管理一些会话数据,以便socket.io能够读取它。这样做可能会使我存储在Redis中的Laravel会话数据和会话数据相互矛盾,这将在某个时候发生。例如,在某些极端情况下,可以重用过期的会话id,并且某些socket.io客户端将作为另一个用户进行错误的身份验证。现在我想不出更多琐碎的情况了,但由于这种不一致,我认为可能存在这样的情况,而且安全性和UX都可能受到损害。
是一种更优雅、健壮和安全的方法来实现基于socket.io应用程序中的Laravel数据的用户身份验证?如果没有非常好的方法,并且我假设方法B是最好的,那么我可以做些什么来提高我使用Redis和Laravel数据管理的会话数据之间的一致性。
据我所能总结的全部要点实际上是访问Laravel和php之外的Laravel会话数据,并通过sessionId、电子邮件和用户名识别客户端。
发布于 2015-07-05 19:17:32
我建议您使用JSON令牌身份验证。
JSON (JWt)是一种相对较新的令牌格式,用于空间受限环境,如。JWT是作为一种在各方之间传输安全声明的方法而设计的。关于JWT的更详细信息
使用Laravel最简单的方法是使用像这一个这样的包。或者你可以通过你自己来实现它。
使用JWT,您将能够从令牌访问用户。例如:
$user = JWTAuth::parseToken()->toUser();
有关如何使用‘jwt’的详细信息,请查看这里。
发布于 2015-07-16 17:00:55
正如Alexandros已经指出的,您应该使用JWT。
使用socket.io对JWT进行身份验证很容易。您可以使用索凯提奥和jsonwebtoken (在这个文章中描述得很好)来验证您的用户。此外,您可以使用多滕诺夫从Laravel.env文件中读取签名令牌的密钥。
对我来说,它工作得很好,尽管你必须考虑到令牌的失效。在拉勒维尔,jwt使用黑名单来处理这个问题。因此,在您的节点服务器中,您必须自己处理这个问题。或者缩短生命时间。
发布于 2016-07-07 03:48:10
大约一年前,我找到了一个很好的解决方案。我决定让它成为一个模块,它非常容易使用。帮助你在不需要硬编码的情况下得到曲奇。帮助您获取会话Id,并从mysql和redis检索它。
https://www.npmjs.com/package/node-laravel-session
这样你就可以分享你所有的会话。您也可以利用该会话注册用户到特定的房间。
https://stackoverflow.com/questions/31233578
复制相似问题