Client/serveur avec authentification

Fermé
bigseydi Messages postés 21 Date d'inscription vendredi 12 novembre 2010 Statut Membre Dernière intervention 4 mai 2016 - 4 déc. 2012 à 05:47
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 4 déc. 2012 à 10:50
Bonjour,

Je dois réaliser un projet client/serveur en C en mode TCP (avec les sockets,threads..).
Les utilisateurs qui utilisent le programme CLIENT doivent s'authentifier (en fournissant un login et un mot de passe) pour accéder au serveur.

Ma seule question est comment réaliser cette phase d'authentification ? Quels fonctions ou protocoles doit on utiliser ?

Merci de votre aide

2 réponses

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 4/12/2012 à 10:59
Salut bigseydi,

Sur le mode d'authentification, ou le protocole d'authentification, tu peux faire simple comme tu peux faire compliqué.

Si tu veux que le mot de passe ne transite pas en clair sur le réseau pour des raisons de sécurité, tu peux au minimum utiliser une fonction de hachage de type SHA1, par exemple.

Ou une option plus poussée, serait utiliser une bibliothèque qui te permettra de mettre en oeuvre un protocole standard d'authentification comme SASL.

Par exemple, la bibliothèque GNU SASL, écrite en C, qui est portable (et "thread-safe") et utilisable sous Windows comme sous Linux, et te permettra d'incorporer une dialogue SASL entre ton client et ton serveur, en supportant les mécanismes d'authentification de ton choix parmi ceux disponibles.

http://www.gnu.org/software/gsasl/

Des exemples de code C pour le client et le serveur figurent dans la documentation : http://www.gnu.org/software/gsasl/manual/gsasl.html#Example-1 (dans cet exemple avec CRAM-MD5).

La bibliothèque est en LGPL. Il existe des binaires compilés pour Windows :

https://josefsson.org/gsasl4win/ (chercher les binaires là : https://josefsson.org/gnutls4win/)
http://www.gnu.org/software/gsasl/manual/html_node/Installing-under-Windows.html#Installing-under-Windows

C'est un peu l'artillerie lourde, mais cela a un intérêt si ton serveur, lui-même, utilise un protocole de communication standard, et doit pouvoir fonctionner avec des clients sécurisés utilisant les mêmes protocoles d'authentification et de communication.


Dal
1
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
4 déc. 2012 à 07:56
Bonjour,
Comme on ne vous précise pas le type d'auth c'est que c'est à vous de le créer à mon avis alors c'est au niveau du serveur prévoir le stockage des id&pass, donc tout simple : lorsqu'un client viendra sur le port d'écoute du serveur (création d'un thread pour la connection du client) il envera la demande de login puis du pass :
serveur > client : demande de login
client > serveur : envoi son id
serveur > client : demande de pass
client > serveur : envoi du pass
serveur fait la vérification du login et pass si incorrect retourne un message/code d'erreur au client et coupe la connection&tue le thread du client.
si id et pass ok le serveur fait persister la connection et le client peut utiliser des commandes sur le serveur.
-1