Die Upgrade-Anforderung zum Öffnen einer Websocket-Verbindung ist eine Standard-HTTP-Anforderung. Auf der Serverseite kann ich die Anfrage wie jede andere authentifizieren. In meinem Fall möchte ich die Bearer-Authentifizierung verwenden. Leider gibt es keine Möglichkeit, beim Öffnen einer Websocket-Verbindung im Browser Header anzugeben, was zu der Annahme führen würde, dass es nicht möglich ist, die Authentifizierung des Inhabers einer Web-Socket-Upgrade-Anfrage durch die Bearer-Authentifizierung zu verwenden. Also - Fehle ich etwas oder ist es wirklich unmöglich? Wenn es unmöglich ist, ist dies von Entwurf, oder ist das ein eklatanter Überblick in der Browser-Implementierung der Websocket-API?Kann die Bearer-Authentifizierung für Websocket-Upgrade-Anfragen verwendet werden?
Antwort
Sie haben Recht, es ist jetzt unmöglich, Authentication-Header zu verwenden, da JavaScript WebSocket API entworfen wurde. HTTP headers in Websockets client API
jedoch Bearer Authentifizierungstyp ermöglicht eine Anforderung Parameter mit dem Namen „access_token“:: http://self-issued.info/docs/draft-ietf-oauth-v2-bearer.html#query-param Dieses Verfahren ist kompatibel mit websocket Verbindung Weitere Informationen können in diesem Thread finden.
Die API ermöglicht es Ihnen, genau eine Kopfzeile festzulegen, nämlich Sec-WebSocket-Protokoll, d. H. Das anwendungsspezifische Subprotokoll. Sie könnten diesen Header zum Übergeben des Bearer-Tokens verwenden. Zum Beispiel:
new WebSocket("ws://www.example.com/socketserver", ["access_token", "3gn11Ft0Me8lkqqW2/5uFQ="]);
Der Server wird erwartet, dass eines der Protokolle akzeptieren, so für das obige Beispiel, können Sie einfach das Token validieren und reagieren mit Kopf Sec-WebSocket-Protokoll = access_token.
Ich verwendete diesen Ansatz, außer dass ich das Token und den Wert in einem einzelnen "Protokoll" -Wert verkettete. Vielen Dank! – dmansfield