Précédent   Forum du club des développeurs et IT Pro > Dotnet > Développement Windows > Windows Forms
Windows Forms Forum d'entraide sur le développement Windows Forms & Applications Windows. Avant de poster -> Articles Windows Forms
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/10/2006, 10h19   #1
Zebeber
En attente de confirmation mail
 
Inscription : mars 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 45
Points : 4
Points : 4
Par défaut [c#] Mot de passe sur application. Quelle solution utiliser?

Bonjour à tout le monde,

je voudrais faire une form qui demande un login et un mot de passe pour pouvoir travailler avec mon application.
Ce login et mot de passe, je voudrais le mettre dans une base de données.
Quelle est la meilleure solution pour faire ceci? Sans trop de complications bien sur?
Faire un select * FROM users et regarder si ma requête ne me retourne qu'une seule ligne?

Comment faire cela en c#?

Merci de vos conseils
Zebeber est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 11h02   #2
Mehdi Feki
Membre Expert
 
Avatar de Mehdi Feki
 
Inscription : décembre 2004
Messages : 1 113
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : décembre 2004
Messages : 1 113
Points : 1 437
Points : 1 437
Tu enregistre une valeur hashée du mot de passe en utilisant System.Security.Cryptography.HashAlgorithm.
Si l'utilisateur perd sont mot de passe tu lui regenere un nouveau aléatoirement et tu lui donne la possibilité de le modifier.

Pour info System.Security.Cryptography.KeyedHashAlgorithm est plus securisé, mais il faut dans ce cas garder la clé de hashage par exemple la hard coder.
__________________
Mehdi Feki : Modérateur .Net
Mehdi Feki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 11h22   #3
collaud_vb
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 79
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 79
Points : 25
Points : 25
ça dépend du niveau de sécurité dont tu as besoin...

tu peux simplement créer une table 'password', avec deux champs : 'profil' et 'pass'...

pis dans ton form de connection, tu mets un combobox avec la liste des profil (ou un textbox si y a bcp d'utilisateurs...), pis un textbox pour entrer le pass (en ajoutant la propriété "hide text" pour que ce soit des points qui apparaissent...), puis à la validation (bouton 'connection'), tu compare la valeur entrée avec celle qui est stockée...

si true> connect, si false > ciao bonne
collaud_vb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 11h26   #4
Zebeber
En attente de confirmation mail
 
Inscription : mars 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 45
Points : 4
Points : 4
Ouais, heu ça se sera pour un stade ultérieur à mon application.
Mais mon problème principal, pour l'instant c'est uniquement d'aller rechercher mon login et mon mot de passe dans la base de données.
Pour l'instant, j'ai ceci, mais qui ne fonctionne pas : Je reçois une exception "ExecuteReader : connection non établie", un truc du genre.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
public int Authentification(string login, string password)
        {
            try
            {
                this.Ouvre_connexion();
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "SELECT COUNT(login),password FROM users WHERE " +
                                    " login = @prm_login AND password = @prm_password";
                SqlParameter prm_login = new SqlParameter("@prm_login",SqlDbType.Text);
                prm_login.Value = login;
                SqlParameter prm_password = new SqlParameter("@prm_password",SqlDbType.Text);
                prm_login.Value = password;
                cmd.Parameters.Add(prm_login);
                cmd.Parameters.Add(prm_password);
                SqlDataReader dr = cmd.ExecuteReader();
                int nbr_lignes = 0;
                while (dr.Read())
                    nbr_lignes++;
                if (nbr_lignes == 1)
                    return 1;
                else return 0;               
            }
            catch (Exception e)
            {
                MessageBox.Show("Erreur de connexion" + e.Message);
                return 0;
            }
        }
Zebeber est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 12h02   #5
Mehdi Feki
Membre Expert
 
Avatar de Mehdi Feki
 
Inscription : décembre 2004
Messages : 1 113
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : décembre 2004
Messages : 1 113
Points : 1 437
Points : 1 437
Citation:
Envoyé par Zebeber
Quelle est la meilleure solution pour faire ceci?
Je ne comprends plus, tu veux qu'on te propose des soliutions ou tu veux qu'on te corrige ton code ?

Pour ta deuxieme question j'ecrirais plutot comme ca la requete :

Code :
1
2
3
4
5
6
 
 cmd.CommandText = "SELECT UserId FROM users WHERE " +
                                    " login = @prm_login AND password = @prm_password";
//......
if (dr.Read())
//.......
parce que je crois qu'il manque un groupe by dans la requete utilisant Count :

Code :
1
2
3
 
 cmd.CommandText = "SELECT COUNT(*),UserId FROM users WHERE " +
                                    " login = @prm_login AND password = @prm_password group by (UserId)";
__________________
Mehdi Feki : Modérateur .Net
Mehdi Feki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 12h11   #6
Zebeber
En attente de confirmation mail
 
Inscription : mars 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 45
Points : 4
Points : 4
Voilà, j'ai fait quelques modifs dans mon code, j'ai fait une requête paramétrée et maintenant cela fonctionne.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
public int Authentification(string login, string password)
        {
            try
            {
                this.Ouvre_connexion();
                string requete = "SELECT login,password FROM users WHERE " +
                                    " login LIKE @prm_login AND password LIKE @prm_password";
                SqlCommand cmd = new SqlCommand(requete,connexion);
                cmd.CommandText = requete;
                SqlParameter prm_login = new SqlParameter("@prm_login", SqlDbType.Text);
                prm_login.Value = login;
                SqlParameter prm_password = new SqlParameter("@prm_password", SqlDbType.Text);
                prm_password.Value = password;
                cmd.Parameters.Add(prm_login);
                cmd.Parameters.Add(prm_password);
 
                SqlDataReader dr = cmd.ExecuteReader();
                int nbr_lignes = 0;
                while (dr.Read())
                    nbr_lignes++;
                if (nbr_lignes == 1)
                    return 1;
                else return 0;               
            }
            catch (Exception e)
            {
                MessageBox.Show("Erreur de connexion : " + e.Message);
                return 0;
            }
        }
Maintenant que ceci fonctionne, je vais essayer d'adapter une sécurité en plus en utilisant le hashage.

Si vous avez d'autres suggestions, je suis preneur.
Et si vous voyez des commentaires à faire sur le code que j'ai fait ici pour mon authentification, n'hésitez pas.

Merci de votre patience et de votre aide.

Zebeber
Zebeber est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 12h15   #7
Mehdi Feki
Membre Expert
 
Avatar de Mehdi Feki
 
Inscription : décembre 2004
Messages : 1 113
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : décembre 2004
Messages : 1 113
Points : 1 437
Points : 1 437
Pas la peine de compter le nombre de lignes, ton datareader retourne soit 0 ou 1 enregistrement. un petit if (dr.Read()) ou dr.HasRows suffit.
A+
__________________
Mehdi Feki : Modérateur .Net
Mehdi Feki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 13h08   #8
Zebeber
En attente de confirmation mail
 
Inscription : mars 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 45
Points : 4
Points : 4
Merci de l'info. Si je peux gagner quelques millisecondes, je prends..

Si je peux me permettre, j'ai encore une autre question.
Au chargement de mon programme, j'ouvre une fenêtre qui demande un login et mot de passe. Si ceux ci sont corrects, alors, l'utilisateur peut continuer à utiliser le programme. Si pas, celui ci se ferme (ou redemande le mot de passe).
La suite de mon programme est une fenêtre parent MDI dans laquelle j'ai un menu et une satusbar.
Comment puis-je faire pour mettre le nom de l'utilisateur qui se connecte au programme dans un label de ma statusbar?
Autrement dit, comment passer des paramètres à n'importe quelle fenêtre en c#?
Zebeber est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 16h51   #9
Mehdi Feki
Membre Expert
 
Avatar de Mehdi Feki
 
Inscription : décembre 2004
Messages : 1 113
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : décembre 2004
Messages : 1 113
Points : 1 437
Points : 1 437
La question a été évoquée plusieurs fois, fais une petite recherche tu trouveras la reponse :

Soit :
1) Tu cree une classe statique comme ca tu peux acceder aux données dans toutes les forms.
2) Tu passe le parametre dans le constructeur de la deuxieme form.
3) tu crees une propriete dans la deuxieme form que tu lui affecte le contenu du username apres la construction de la form.

y'en plein d'autres.
__________________
Mehdi Feki : Modérateur .Net
Mehdi Feki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 20h51   #10
Zebeber
En attente de confirmation mail
 
Inscription : mars 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 45
Points : 4
Points : 4
Merci de ces informations. J'en prends bonne note car ça pourrait résoudre 2-3 de mes soucis dans mon soft.

Merci encore de ton aide.
Zebeber est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h49.


 
 
 
 
Partenaires

Hébergement Web