2015-07-28 19 views
9

Konfiguruję serwer Node.js do komunikacji z WebSockets do mojej aplikacji internetowej. Planowałem używać JSON Web Tokens, aby ograniczyć dostęp tylko do użytkowników, którzy już zostali uwierzytelnieni za pomocą naszej aplikacji internetowej. Podczas wyszukiwania mam problem ze znalezieniem pakietu WebSocket dla Node.js, który obsługuje ustawienia po stronie klienta nagłówka Authorization i używa tego przy pierwszym połączeniu połączenia?Przekazywanie JWT do Node.js WebSocket w nagłówku Authorization przy pierwszym połączeniu

Regularnie widzę zalecenia dotyczące przekazywania tokena za pomocą parametru zapytania, które może być mniej bezpieczne niż przekazywanie tokenu za pośrednictwem nagłówka Authorization. Czy czegoś brakuje? Czy są jakieś dobre, dobrze utrzymane biblioteki WebSocket, które umożliwiają ustawienie klienta nagłówkowego Authorization, aby zapobiec niechcianym połączeniom z serwerem?

+1

Próbuję wypracować to samo. O ile mogę powiedzieć, przeglądarka zajmuje się wszystkimi nagłówkami i nie oferuje sposobu na ich zmianę. Próbuję dodać token do kwerendy na adres URL połączenia, ale staram się uzyskać te informacje na końcu serwera (node.js z biblioteką ws). Nie sądzę, aby parametr zapytania był mniej bezpieczny. Jak się masz? – Rog

+0

Pracowałem tak bardzo. Z? Jwt = blah querystring ... var token = url.parse (ws.upgradeReq.url, true) .query.jwt; – Rog

+0

ale to naraziłoby jwt na prawą? –

Odpowiedz

8

WebSocket API oparty na przeglądarce does not make it possible to specify HTTP headers. Z drugiej strony, podejście oparte na paramecie zapytania działa i nie jest takie złe (gdy jest używane przez HTTPS), dlatego często jest używane.

Chociaż istnieją implementacje WebSocket dla Node.js, które umożliwiają określenie nagłówków HTTP, działa to tylko podczas uruchamiania klienta w pliku Node.js. Nie działa podczas działania w przeglądarce.

Einaros 'ws jest jednym z takich przykładów. Przechodząc tokenu JWT poprzez Authorization nagłówku jest prosta, gdy uruchomiony w node.js:

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); 
... 

Ale kiedy jest stosowany od Browserify, wymagające ws prostu zwraca zwykłej przeglądarki oparte websocket API, które jest w stanie przekazywania nagłówków niestandardowych. I chyba, że ​​przeglądarki internetowe dodają obsługę przechodzących nagłówków, przejście przez parametr zapytania jest drogą do zrobienia.