2015-07-28 8 views
9

Ich richte einen Node.js-Server ein, um mit WebSockets mit meiner Web-App zu kommunizieren. Ich wollte JSON Web Tokens verwenden, um den Zugriff auf Benutzer zu beschränken, die sich bereits mit unserer Webapp authentifiziert haben. Bei der Recherche habe ich Probleme, ein WebSocket-Paket für Node.js zu finden, das die clientseitige Einstellung des Headers Authorization unterstützt und diese beim ersten Verbindungsaufruf verwendet?Übergabe von JWT an Node.js WebSocket im Authorization-Header bei der ersten Verbindung

Ich sehe regelmäßig Empfehlungen, um das Token über Abfrageparameter zu übergeben, der weniger sicher sein könnte, als das Token über den Header Authorization zu übergeben. Fehle ich etwas? Gibt es gute, gut gewartete WebSocket-Bibliotheken, die es ermöglichen, die Header-Seite Authorization so zu setzen, dass ich unerwünschte Verbindungen zum Server verhindern kann?

+1

Ich versuche, das gleiche zu erarbeiten. Soweit ich das beurteilen kann, kümmert sich der Browser um alle Header und bietet keine Möglichkeit diese zu ändern. Ich versuche, ein Token zu der Querystring auf der Verbindungs-URL hinzuzufügen, aber ich kämpfe um diese Informationen auf dem Server-Ende (node.js mit der Bibliothek ws). Ich glaube nicht, dass ein Abfrageparameter weniger sicher ist. Wie machst du es? – Rog

+0

Ich arbeitete das bisschen raus. Mit einem? Jwt = blah querystring ... var token = url.parse (ws.upgradeReq.url, wahr) .query.jwt; – Rog

+0

aber das würde die jwt offen legen? –

Antwort

8

Browserbasierte WebSocket-API does not make it possible to specify HTTP headers. Auf der anderen Seite funktioniert der Abfrage-Param-Ansatz und ist nicht so schlimm (wenn er über HTTPS verwendet wird), daher wird er oft verwendet.

Obwohl WebSocket-Implementierungen für Node.js die Angabe von HTTP-Headern ermöglichen, funktioniert dies nur, wenn der Client in Node.js ausgeführt wird. Es funktioniert nicht, wenn es in einem Browser ausgeführt wird.

Einaros 'ws ist ein solches Beispiel. eine JWT-Token über Authorization Header Pass ist einfach, wenn in Node.js ausgeführt wird:

var WebSocket = require("ws"); 

' does not work in browsers 
var token = "Replace_this_with_your_JWT_token"; 
var options = { 
    headers: { 
     "Authorization" : "JWT " + token 
    } 
}; 

var ws = new WebSocket("wss://example.com/path", options); 
... 

Aber wenn verwendet von Browserify, erfordern ws gibt einfach den gewöhnlichen Browser-basierte WebSocket-API, die die Weitergabe benutzerdefinierte Header nicht in der Lage ist. Und wenn Webbrowser keine Unterstützung für das Übergeben von Kopfzeilen hinzufügen, ist die Weiterleitung über den Abfrageparameter der richtige Weg.

Verwandte Themen