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

Soyez le premier à donner votre avis sur cette source.

Vue 14 101 fois - Téléchargée 1 555 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
aymane_chamlal Messages postés 3 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 8 mars 2015
5 mai 2014 à 14:37
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.
louidji21 Messages postés 3 Date d'inscription samedi 30 octobre 2010 Statut Membre Dernière intervention 19 mai 2011
20 avril 2011 à 19:16
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
noussa8433 Messages postés 5 Date d'inscription jeudi 19 mars 2009 Statut Membre Dernière intervention 20 septembre 2010
6 avril 2009 à 09:23
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
cs_boutemine Messages postés 78 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 21 mars 2018 2
29 août 2008 à 01:30
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
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
29 août 2008 à 00:23
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.