IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Authentification webSocket sécurisé automatique


Sujet :

NodeJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2012
    Messages : 12
    Par défaut Authentification webSocket sécurisé automatique
    Bonjour à tous,

    dans le cadre d'un projet perso, je me retrouve complètement bloqué et les recherches que je réalise sur le net ne fournissent pas de solution satisfaisante.
    Je viens donc réclamer un coup de pouce pour m'aiguiller sur les possibilités envisageables.

    Voici ma situation :

    J'ai un serveur physique sur lequel tourne un server web codé en NodeJS.
    J'ai une multitude de machines clients qui fonctionnent de maniere automatique sans intervention humaine.

    Les clients s'allument et s'eteignent chaque matin et chaque soir. Apres avoir démaré, le navigateur web se connect automatiquement sur l'adresse Web de mon serveur.

    L'objectif final est que chaque client soit connecté au server via une connection Websocket, afin que le serveur puisse appeller une méthode chez un client précis (le serveur doit donc pouvoir identifier chaque client).
    Toutefois, je souhaite que seul mes postes client puissent se connecter/etre identifié par le serveur (si une personne extérieur tape l'url de mon server dans son navigateur, je veux lui refuser tout acces).

    Il faut donc que mes clients prédéterminés, puissent se connecter en Websocket à mon serveur automatiquement, et que le serveur les identifies pour pouvoir faire appel à leur méthode de maniere déterminer (qu'il puisse fare appel à la méthode d'un client précis).


    J'ai donc pensé à une authentification par login/mot de passe via cookie signé, envoyé par mes machines clientes. Le serveur autoriserait la connection websocket et identifirait le client par son login.

    Est ce d'après vous une solution envisageable ? Existe t'il une meilleur option ? Savez vous comment mettre en place ce genre de systeme (authentication sécurisé via cookie) ? Faut il utiliser des technologies comme Redis pour sauvegarder les sessions ?


    Je vous remercie par avance pour toute l'aide que vous serez susceptible de me fournir et donc j'ai réellement besoin !

    Bonne journée à tous !

    Panda

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    Bonjour,

    Pour répondre à ta question, je te renvoi à cette excellent article qui traite de l'authentification par cookie ou token (avec une préférence justifiée pour le token) https://auth0.com/blog/2014/01/15/auth-with-socket-io/. tu as même le détail de l'implémentation.

    Par simple curiosité, si tu utilise les websockets, c'est que ton serveur commande tes clients tout au long de la journée? sinon pour quoi pas une simple api rest? et pourquoi dans un navigateur?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2012
    Messages : 12
    Par défaut
    Bonjour !!

    Tout d'abords je tiens à te remercier pour ta réponse. J'ai bien lu l'article que tu as linké qui effectivement à l'air de proposer une solution élégante pour mon probleme (a savoir l'auth via token).

    J'ai quelques questions néophyte à propos de l'article, et serais très reconnaissant d'avoir vos lumiere la dessus :

    -Il semblerait que la validation de l'utilisateur ne soit pas faite dans l'exemple de l'article (elle doit etre faite server side à l'endroit du todo). Suis je obligé de passer par une étape base de donné pour gérer la validation de l'utilisateur ou existe il une solution plus simple tout en restant efficace/scalable.

    -De plus, je ne comprends pas l’intérêt d'envoyer les informations du profil utilisateur dans le token :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // we are sending the profile in the token
      var token = jwt.sign(profile, jwtSecret, { expiresInMinutes: 60*5 });
    Est ce que ces informations résulte du profil chargé suite à la validation de l'utilisateur ?

    -La derniere question que j'aurais concerne les données login/mdp fournies par le client. Si je comprends bien le code client side, ces informations sont fourni dans la partie suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $.post('/login', {
        username: $('username').val(),
        password: $('password').val()
      })
    Dans mon cas, l'idée serait donc de stocker le username et le password dans un fichier stocké sur le poste client et d'accéder à ces valeurs depuis le code client side pour que le poste soit capable de s'authentifier tout seul. Ai je juste ? Quelle solution existe pour réaliser cela ? Est ce réellement sécurisé (personne ne devrait avoir d'acces physique au poste client)

    Je vous remercie pour votre aide qui m'est extremement utile !!!


    Pour ce qui est de mon projet, j'utilise un navigateur car la techno que j'utilise est le webRTC. Pour se faire j'utilise un server de signalement qui fonctionne à l'aide de WebSocket. Voila la raison pour laquelle j'utilise du websocket plutot qu'une API REST.

    J'espere avoir été claire dans mes questions bien que celles ci puissent sembler très basiques. Si jamais des précisions ou des éclaircissements doivent etre fait, n'hésitez pas à me le faire savoir !!!

    D'avance merci !

    Panda

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    En fait, je pense que tu mélange authentification et gestion de session. L'authentification est indispensable et permet au serveur de savoir s'il te connaît, il est donc nécessaire de passer par la case bdd (je suppose que tu ne compte pas mettre la liste de tes clients dur dans le code...). La gestion de la session c'est une fois que tu as été authentifier une "variable" en mémoire qui t'es propre et qui va conserver les variables de "l'instance" du dialogue que tu as initié.

    Avec la gestion de session par cookie, ce trouve dans le cookie une "clé" qui permet de retrouver la session coté serveur, et indirectement sert de nouvel authentification tant que la session n'est pas expirée. Mais il faut bien une première authentification pour créer cette session...

    Le JsonWebToken te permet de gérer les sessions coté client, et te permet d'être plus scalable, car, avec les cookies, si tu crée une session sur le serveur 1 et que un load-balancer te redirige sur le serveur2... il ne connaitra pas ta session... et te demandera de t'authentifier à nouveau. Pour info, on peut contourner le problème en stockant les sessions dans redis, avec un maitre-maitre sur les deux serveurs... bref.

    donc:

    Suis je obligé de passer par une étape base de donné pour gérer la validation de l'utilisateur
    Si tu gère tes utilisateurs toi même (sans service tiers du type googleid, facebook ou autre...), oui.

    De plus, je ne comprends pas l’intérêt d'envoyer les informations du profil utilisateur dans le token
    Comme expliqué plus haut, tu envoi les informations de session... comme le profil utilisateur (en totalité ou en partie, comme tu veux en fait).
    Est ce que ces informations résulte du profil chargé suite à la validation de l'utilisateur ?
    bha oui

    Si je comprends bien le code client side, ces informations sont fourni dans la partie suivante
    oui, mais ce n'est qu'une façon de procéder. là il utilise jquery, mais cela n'a rien de significatif.

    l'idée serait donc de stocker le username et le password dans un fichier stocké sur le poste client et d'accéder à ces valeurs depuis le code client side pour que le poste soit capable de s'authentifier tout seul. Ai je juste ?
    oui

    Quelle solution existe pour réaliser cela ?
    avec FileReader https://developer.mozilla.org/fr/doc...API/FileReader

    Est ce réellement sécurisé
    Pas vraiment, dans la mesure ou tu stocke tes identifient en locale... mais le problème ce pose que ce soit avec les cookies ou les tokens.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2012
    Messages : 12
    Par défaut
    Woaw ...

    Tout d'abords, je tiens à te remercier pour toutes ces réponses vraiment précises et qui m'ont enormement aidé à comprendre la situation (meme si ca pouvait parfoit sembler évident ).

    Je vais donc m'orienter sur cette solution en cherchant comment gérer l'authentification avec la BDD de mes utilisateurs (avec hashage du mdp etc...).

    Pour ce qui est de la sécurité, les postes clients ne sont pas accessible physiquement, le fait d'avoir ce genre d'information en local ne devrait donc pas poser de probleme en soit.

    Encore merci pour ton aide extremement précieuse !

    Je te présente mes meilleurs voeux pour cette nouvelle année


    Panda

Discussions similaires

  1. Authentification avec javascript automatiquement
    Par achraf.nhaila dans le forum NodeJS
    Réponses: 0
    Dernier message: 04/09/2015, 12h42
  2. authentification plus sécurisé
    Par fleurrouge dans le forum Langage
    Réponses: 3
    Dernier message: 25/04/2012, 16h35
  3. Authentification, AJAX sécurisé
    Par kheraud dans le forum Sécurité
    Réponses: 1
    Dernier message: 09/10/2009, 16h43
  4. [MySQL] Authentification automatique
    Par Kant2006 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 01/03/2006, 14h16
  5. [LDAP] Authentification automatique LDAP
    Par Gogus dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 19/12/2005, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo