Proteger son application, authentification par comptes système [grace a active directory]

Soyez le premier à donner votre avis sur cette source.

Vue 13 661 fois - Téléchargée 1 495 fois

Description

Bonjour tout le monde
voici une petite application qui effectue une recherche des objets (Comptes utilisateurs humains du système) par des requettes dans AD et permet de lister les noms des comptes ainsi de vérifier les informations de login (Mot de passe)

Grace a ce code, on peut proteger nos application par l'authentification intégrée du système d'exploitation.

Source / Exemple :


using System;
using System.DirectoryServices;
using System.Management;
using System.Windows.Forms;

namespace ListeUtilisateursDuSystem
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private void frmMain_Shown(object sender, EventArgs e)
        {
            // Lecture des nom d'utilisateurs.
            GetSystemUsers();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            //Sortir
            this.Close();
            Application.Exit();
        }

        private void GetSystemUsers() 
        { 
            this.Cursor = Cursors.WaitCursor; 
            try { 
                //Préparation 
                this.lblDomainName.Text = ""; 
                this.lblMachineName.Text = ""; 
                this.cbxUsers.Items.Clear(); 
                //Lecture du nom de domaine 
                string localdomain = GetDomain(); 
                //Lecture du nom de la machine. 
                string localpc = Environment.MachineName;

                this.lblDomainName.Text += localdomain;
                this.lblMachineName.Text += localpc;
                Application.DoEvents(); 
                //Si le nom de domaine est unconnu. 
                if (localdomain == string.Empty) 
                { 
                    //L'objet dirEntry est un composant ajouté depuis le toolBox (Juste pour une info de +). 
                    this.dirEntry.Path = "WinNT://" + localpc; 
                } 
                else 
                { 
                    this.dirEntry.Path = "WinNT://" + localdomain + "/" + localpc; 
                } 
                //Prendre les utilisateurs humains de la machine
                foreach (DirectoryEntry child in this.dirEntry.Children) 
                { 
                    if (child.SchemaClassName == "User") 
                        this.cbxUsers.Items.Add(child.Name);
                } 
            } 
            catch (Exception ex) 
            {
                MessageBox.Show("Erreur:" + ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            } 
            
            this.Cursor = Cursors.Default; 
        }
        private string GetDomain()
        {
            try
            {
                //Requette de recheche sur les informations du système. 
                string squery = "SELECT * FROM Win32_ComputerSystem";
                //Création d'un objet Management Searcher. 
                ManagementObjectSearcher mgmtsearch = new ManagementObjectSearcher(squery);
                //Recherche l'entrée Domain dans la liste des infos système. 
                foreach (ManagementObject item in mgmtsearch.Get())
                {
                    return (item["Domain"].ToString());
                }
                return string.Empty;
            }
            catch
            {
                return string.Empty;
            }
        }

        private void btnConnect_Click(object sender, EventArgs e)
        {
            Connect(cbxUsers.Text, txtPassword.Text);
        }

        private void Connect(string userName, string password)
        {
            try
            {
                DirectoryEntry de = new DirectoryEntry("LDAP://localhost/CN=Users;DC=" + lblDomainName.Text, lblDomainName.Text + "/" + userName, password, AuthenticationTypes.Secure);
                object test = de.NativeObject; // Si cette propriété peut etre lu, donc les informations de connexion sont correctes.
                MessageBox.Show("Salut " + userName, "Authentication réussite", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message, "Erreur:", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3
Date d'inscription
vendredi 4 avril 2014
Statut
Membre
Dernière intervention
8 mars 2015

Bonjour, Mr
Merci pour votre noble travail, j'ai télécharger l'application mais elle ne marche pas. Je ne sais pas si je dois modifier quelque chose en code ou non.
SVP j'attends votre reponse, et merci d'avance.
Messages postés
3
Date d'inscription
samedi 30 octobre 2010
Statut
Membre
Dernière intervention
19 mai 2011

bonjour,
sur mon pc , quand j'essaye de faire fonctionner ton application lorsque je me connecte il me dit toujours que le serveur n'est pas opérationnel , je ne comprend pas. quelqu'un pourrais me l'expliquer?
merci
Messages postés
5
Date d'inscription
jeudi 19 mars 2009
Statut
Membre
Dernière intervention
20 septembre 2010

bonjour
comment tu peut utiliser cette application pour réaliser une authentification unique avec les application oracle(cad après la vérification dans AD ensuite faire une vérification dans OID)
c une application très interréssante pour débuter un projet SSO
Messages postés
78
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
21 mars 2018
1
Salut
ça c'est mieux,
J'ai pas vu cet article sinon, je profite de la fenetre de login du système,

Article tres intéressant

Merci
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
22
Bonjour,

Plutot que de faire ta propre fenêtre de login, tu peux utiliser celle de windows, Kenny Kerr explique tout ça ici : http://msdn.microsoft.com/fr-fr/library/aa480470.aspx

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.