Ich möchte socket.io-Clients anhand von Clientsitzungsdaten authentifizieren, die von Laravel erstellt wurden.Laravel 5: Socket.io-Clientauthentifizierung mit Laravel-Sitzungsdaten
Was ich gedacht habe ist von:
A - Emissionsbenutzernamen und E-Mail vom Client zum Server;
B - Speichern der Daten, die mein socket.io-Server in Redis in php benötigt, nachdem sich der Benutzer anmeldet und dann in Node.js basierend auf der Session-Cookie-ID liest. Ich werde wahrscheinlich in Redis sessionId -> "email, name"
speichern müssen, wenn ich diesen Ansatz bevorzuge.
C - Verwenden des Redis-Sitzungstreibers in Laravel, Dekodieren von Cookies, die von Laravel gesetzt wurden, Zugreifen auf Laravel-Sitzungswerte von Node.js, unserialisieren und entschlüsseln;
Ansatz A ist offensichtlich sehr unsicher und könnte nur verwendet werden, um das Konzept zu beweisen.
Ansatz C scheint besser zu sein, da ich Sitzungsdaten nicht duplizieren oder verwalten muss, sondern nur um sie zu dekodieren. Dieser Weg verbindet jedoch meine Anwendung mit den Implementierungsdetails von Laravel-verwalteten Sitzungen und scheint daher nicht angemessen zu sein.
Ansatz B sieht vielversprechender aus und ist einfacher zu implementieren. Aber mit Ansatz B bedeutet, dass ich einige Sitzungsdaten selbst verwalten muss, damit socket.io es lesen kann. Dies kann dazu führen, dass Laravel-Sitzungsdaten und Sitzungsdaten, die ich in Redis speichere, widersprüchlich sind und dies zu einem bestimmten Zeitpunkt geschehen wird. Im Extremfall kann zum Beispiel eine abgelaufene Session-ID wiederverwendet werden und ein socket.io-Client wird fälschlicherweise als ein anderer Benutzer authentifiziert. Ich kann mir in diesem Moment keinen trivialeren Fall vorstellen, aber aufgrund dieser Inkonsistenz gehe ich davon aus, dass es einen solchen Fall gibt, und sowohl Sicherheit als auch UX könnten kompromittiert werden.
Was ist eine elegantere, robustere und sichere Möglichkeit, eine Benutzerauthentifizierung basierend auf Laravel-Sitzungsdaten in der socket.io-Anwendung zu erreichen? Wenn es keine drastisch besseren Ansätze gibt und ich nehme an, Ansatz B ist das Beste, was ich tun könnte, um die Konsistenz zwischen den Sitzungsdaten zu verbessern, die ich mit Redis- und Laravel-Sitzungsdaten verwalte.
Der ganze Punkt, so weit ich zusammenfassen kann, ist der Zugriff auf Laravel-Session-Daten außerhalb von Laravel und PHP und die Identifizierung von Clients nach Session-ID, E-Mail und Benutzername.
Es scheint wie viel besser Ansatz als was ich dachte. Ich habe von JWT gelesen und bin auf die Idee gekommen. Es wäre jedoch großartig, wenn Sie Ihre Antwort ein wenig erweitern und erklären, warum JWT gut für die Authentifizierung von socket.io Clients funktioniert (falls jemand anders dieselbe Frage hat). –
Ich habe gerade weitere Informationen über JWT hinzugefügt. –