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.
- 1. Kann Annotationsprozessor für die Codegenerierung verwendet werden?
- 2. Kann ElasticSearch nur für Aggregationen verwendet werden?
- 3. Kann XMLCatalog für Schemaimporte verwendet werden?
- 4. Kann die Stoppuhr im Produktionscode verwendet werden?
- 5. Kann async/await für Konstruktoren verwendet werden?
- 6. PHP: Kann Bereich() für Brüche verwendet werden?
- 7. CanOpenUrl kann nicht für die InterApp-Kommunikation verwendet werden
- 8. Kann Caffe Only ohne Klassifizierung für die Klassifizierung verwendet werden?
- 9. Kann die gleiche sqlcmd.exe für jede Datenbanksicherung verwendet werden
- 10. Eine Variable deklarieren, die für mehrere Formulare verwendet werden kann
- 11. Kann frama-c für die Header-Dateianalyse verwendet werden?
- 12. Kann Roslyn für VB.NET Scripting verwendet werden?
- 13. Kann GitHub für Windows lokal verwendet werden?
- 14. Kann ein Typeconverter für Konstruktorargument verwendet werden
- 15. Kann JaaS für den Rest verwendet werden?
- 16. Kann Python für Mac-Skripts verwendet werden?
- 17. Kann die Destrukturierung in Funktionsargumenten verwendet werden?
- 18. Wie kann die clojure.algo.generic-Bibliothek verwendet werden?
- 19. Sollen Ausnahmen für die Formularvalidierung verwendet werden?
- 20. Kann AzMan für die rollenbasierte Autorisierung von Objekten verwendet werden, die zur Laufzeit erstellt werden?
- 21. kann Jailbroken iphone für die Entwicklung verwendet
- 22. Was kann für DateTime :: diff() für PHP 5.2 verwendet werden?
- 23. Kann HttpClient gleichzeitig verwendet werden?
- 24. BitScanForward64 kann nicht verwendet werden
- 25. Ruby kann nicht verwendet werden
- 26. Kann ExecuteReader() zweimal verwendet werden?
- 27. Kann JSONP sicher verwendet werden?
- 28. kann nicht verwendet werden ScalaTest
- 29. ADLivelyTableView kann nicht verwendet werden
- 30. Responsivevoice.js kann offline verwendet werden?
Ich verwendete diesen Ansatz, außer dass ich das Token und den Wert in einem einzelnen "Protokoll" -Wert verkettete. Vielen Dank! – dmansfield