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

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

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.