Das mag wie eine ziemlich noobish Frage scheinen, aber ich bin gerade in Node.js gekommen und wird benötigt, um sicherzustellen, dass die gleiche Art von Authentifizierung, die in meiner Laravel App geschieht in Node.js passiert.Authentifizieren von WebSocket-Verbindungen
Natürlich muss ich eine API verwenden, aber ich bin verwirrt, wie man es in einer Weise, die sicher ist, tut. Ich habe in diesen Artikel angesehen:
https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf
Und haben durch ihren Algorithmus in den Aufbau einer API sah. Aber ich verstehe nicht, wie es sicher wäre.
Gemäß dem Beitrag speichern Sie einen öffentlichen und privaten Schlüssel in einer Datenbank. Der öffentliche Schlüssel kann von jedem gesehen werden, aber der private Schlüssel ist privat. Wenn Sie es jedoch an den Server senden, senden Sie eine Hash-Version zusammen mit anderen Daten des privaten an den Server.
Das klingt alles gut und gut. Bedeutet das aber nicht, dass der öffentliche Schlüssel und der Hash öffentlich sind, also auch der private Schlüssel?
Zum Beispiel kann sagen, dass ich versuche, die folgende Verbindung
ws://example.com/pull?public=A89-3NJ2-KAN-NKSN1&hash=QmFzZTY0IHRoZSBoZWxsIG91dCBvZiBtZSBiYWJ5Li4uLi4u
zu etablieren Was von einem anderen Benutzer hält nur auf diesen Link teilt einen unabhängigen Benutzer des Zugriff darauf zu geben?
Das Problem ist, dass, wenn Sie einer anderen Person den Link geben, es ihnen den Zugang geben würde, einen WebSocket zu öffnen, zu dem sie sonst keine Erlaubnis hätten. Das versuche ich zu verhindern. – Shawn31313
@ Shawn31313 Sie möchten also, dass es einem Benutzer unmöglich ist, * jemandem * freiwillig zu erlauben, sich als jemand auszugeben? Das ist einfach nicht möglich - ich kann immer mein E-Mail-Passwort oder meine Authentifizierungs-Cookies weitergeben, wenn ich freiwillig meine Fähigkeit verleihen möchte, meine Identität gegenüber jemand anderem zu beweisen. – apsillers
@ Shawn31313 Oder möchten Sie nur verhindern, dass Benutzer den Link versehentlich verraten? Wenn dies der Fall ist, verwenden Sie einfach Cookies oder senden Sie Zugangsdaten innerhalb des Socket-Kanals, um diese Informationen zu übermitteln. – apsillers