Passage de JWT à Node.js WebSocket dans l’en-tête d’autorisation lors de la connexion initiale

Je configure un serveur Node.js pour communiquer avec WebSockets vers mon application Web. Je prévoyais d’utiliser des jetons Web JSON pour limiter l’access aux utilisateurs déjà authentifiés avec notre application Web. Lors de mes recherches, je ne parviens pas à trouver un package WebSocket pour Node.js prenant en charge le paramètre côté client de l’en-tête Authorization et à l’utiliser lors de l’appel de connexion initial?

Je reçois régulièrement des recommandations pour passer le jeton via le paramètre de requête, ce qui pourrait être moins sécurisé que pour le transmettre via l’en-tête Authorization . Est-ce que je manque quelque chose? Existe-t-il de bonnes bibliothèques WebSocket bien entretenues permettant de définir l’en-tête d’ Authorization côté client afin que je puisse empêcher les connexions non souhaitées au serveur?

L’API WebSocket basée sur un navigateur ne permet pas de spécifier des en-têtes HTTP . D’autre part, l’approche de paramètre de requête fonctionne et n’est pas si mauvaise (lorsqu’elle est utilisée sur HTTPS), elle est donc souvent utilisée à la place.

Bien qu’il existe des implémentations WebSocket pour Node.js qui permettent de spécifier des en-têtes HTTP, cela ne fonctionne que lors de l’exécution du client dans Node.js. Cela ne fonctionne pas lors de l’exécution dans un navigateur.

Les exemples d’Einaros en sont un exemple. Passer un jeton JWT via l’en-tête Authorization est simple lors de l’exécution dans 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); ... 

Toutefois, lorsqu’il est utilisé à partir de Browserify, ws renvoie simplement l’API WebSocket standard basée sur un navigateur, incapable de transmettre des en-têtes personnalisés. Et à moins que les navigateurs Web ne prennent en charge le passage des en-têtes, le passage via le paramètre de requête est la voie à suivre.