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

Soyez le premier à donner votre avis sur cette source.

Vue 21 395 fois - Téléchargée 1 069 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 :


Imports System.Management
Imports System.DirectoryServices

Public Class frmMain

    Private Sub GetSystemUsers()
        Me.Cursor = Cursors.WaitCursor
        Try
            'Lecture du nom de domaine 
            Dim localdomain As String = GetDomain()
            'Lecture du nom de la machine. 
            Dim localpc As String = Environment.MachineName
            Me.lblDomainName.Text += localdomain
            Me.lblMachineName.Text += localpc
            Application.DoEvents()
            'Si le nom de domaine est unconnu. 
            If localdomain = String.Empty Then
                'L'objet dirEntry est un composant ajouté depuis le toolBox (Juste pour une info de +). 
                dirEntry.Path = "WinNT://" + localpc
            Else
                dirEntry.Path = "WinNT://" + localdomain + "/" + localpc
            End If
            For Each child As DirectoryEntry In dirEntry.Children
                'Prendre les utilisateurs humains de la machine
                If child.SchemaClassName = "User" Then
                    Me.cbxUsers.Items.Add(child.Name)
                End If
            Next
        Catch ex As Exception
            MessageBox.Show("Erreur:" + ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
        Me.Cursor = Cursors.Default
    End Sub

    Private Function GetDomain() As String
        Try
            'Requette de recheche sur les informations du système. 
            Dim squery As String = "SELECT * FROM Win32_ComputerSystem"
            'Création d'un objet Management Searcher. 
            Dim mgmtsearch As New ManagementObjectSearcher(squery)
            'Recherche l'entrée Domain dans la liste des infos système. 
            For Each item As ManagementObject In mgmtsearch.Get()
                Return item("Domain").ToString()
            Next
            Return String.Empty
        Catch
            Return String.Empty
        End Try
    End Function

    Private Sub Connect(ByVal userName As String, ByVal password As String)
        Try
            Dim de As New DirectoryEntry("LDAP://localhost/CN=Users;DC=" + lblDomainName.Text, lblDomainName.Text + "/" + userName, password, AuthenticationTypes.Secure)
            Dim test As Object = 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 e As Exception
            MessageBox.Show(e.Message, "Erreur:", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

    Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
        Connect(cbxUsers.Text, txtPassword.Text)
    End Sub

    Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
        Me.Close()
        Application.Exit()
    End Sub

    Private Sub frmMain_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
        GetSystemUsers()
    End Sub
End Class

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
32
Petite question ?

Est-ce que ce code marche dans les cas des comptes utilisateurs suivants :

- PC configuré en worksgroup et donc avec des utilisateurs déclarés sur le PC
- PC configuré en domaine avec les utilisateurs déclaré sur le domaine, pas d'utilisateur en local sur le PC
- PC configuré en domaine (donc utilisateur du domaine) mais aussi avec quelques utilisateurs en local sur le PC

J'ai pas les configurations pour tester dans l'immédiat
cs_boutemine
Messages postés
78
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
21 mars 2018
1
Pour la question 1: normalement ça marche tres bien
Pour la question deux, oui mais tu dois fournir le nom de domaine et tu l'indique dans la chaine du path de l'objet DirectoryEntry

Pour la derniere question, j'ai pas compris???
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
32
Pour la question 3, c'est simple, c'est utiliser un compte local du PC (comme dans le cas 1) alors que celui-ci est configuré sur un domaine. Par exemple, utiliser le compte local administrateur ...

Pour le reste j'étudierais un peu le code lorsque j'aurais un peu de temps.

Je garde cette source sous le code, peut-etre qu'elle me serviras un jour :)
cs_boutemine
Messages postés
78
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
21 mars 2018
1
Eh ok, bien sur
Tant que les informations de login et le domaine sont indiqués elle marchera
cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018

C'est une procédure pour vérifier qui est l'utilisateur du logiciel, et donc éventuellement décider s'il a le droit ou non de poursuivre l'exécution du logiciel, c'est bien cela ? Pourquoi tout simplement ne pas lui attribuer le droit d'exécuter l'application plutôt ? (dans l'onglet Sécurité sous XP Pro.) à moins que je n'aie pas compris qqch ?

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.