Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Comment gérez-vous l'authentification lors de l'utilisation de websocket en Python ?

+6 votes

Je suis en phase d'étude d'un projet qui repose sur l'utilisation de websockets en Python.

Je me demande comment on gère la partie authentification sur ce genre de technologie.

Avez-vous des retours à partager ou des pistes à suivre ?

demandé 13-Jan-2015 par DoubleNain (1,718 points)
edité 13-Jan-2015 par max

J'aurais tendance à privilégier l'usage d'un token ou quelque chose de similaire en couplant fortement les communications avec du SSL.

2 Réponses

+4 votes
 
Meilleure réponse

La connexion Websocket est permanente, donc tu fais l'authentification une seule fois, à la connexion, et après tu as l'ID côté serveur attaché à ta session.

Pour l'authentification, tu vas donc mettre du code dans le callback fait à la connexion (par exemple : http://autobahn.ws/python/reference/autobahn.websocket.html#autobahn.websocket.interfaces.IWebSocketChannel.onConnect ) et récupérer des identifiants via la requête (par exemple les headers dans http://autobahn.ws/python/reference/autobahn.websocket.html#autobahn.websocket.protocol.ConnectionRequest ). Après, tu fais ce que tu veux de ces identifiants pour authentifier la personne, tu stockes l'identité de la personne dans la session liée à la connexion, et à chaque message tu peux checker cette identité.

Rien ne t'empêche de faire des système hybride, par exemple de faire une authentification normale via HTTP POST, récupérer un cookie, lire le cookie en JS, envoyer le cookie via header à la connexion websocket et identifier ton utilisateur avec cet ID.

C'est exactement la même chose qu'avec HTTP finalement, sauf qu'on ne fait l'auth qu'une fois à la connexion au lieu de chaque requête.

répondu 13-Jan-2015 par Sam (4,984 points)
sélectionné 19-Jan-2015 par DoubleNain

Merci à tous pour vos réponses qui ont éclairé mes interrogations et soulevé quelques problèmes dans la conception de mon projet.

Si une réponse te plait, met lui un +1. Si une réponse te donne la solution, accepte là (le signe check). Cela aide les autres.

0 votes
  • utiliser secure websocket wss:// aulieu de ws://
  • limiter le nombre de requetes qu'un client peut emettre ds un intervalle de temps?
  • verifier l'origine de la requete?
  • signer les requetes a l'aide d'une paire cle publique, cle privee?
  • echanger un token?
  • quoi d'autre encore?

Et j'imagine qu'il y a surement d'autres pistes a explorer. Faut peut etre que tu nous en dises plus, autrement tu n'auras pas de reponses vraiment precises a ta question.

répondu 13-Jan-2015 par Nsukami_ (1,998 points)
remontrée 14-Jan-2015 par max
...