Bonjour,
je ne suis pas sur d'être a la bonne place pour le message puisque ma question concerne un application web et une non web (une dll), enfin vous me le direz.
Voila je suis présentement en stage et un de mes mandats est de modifier l'authentification d'un programme.
À la base l'authentification se fessais en novell et un début de active directory, conçu par un étudiant cette méthode d'authentification cause des problèmes.
Maintenant, il faut que je modifies le code pour que ce sois uniquement avec active directory.
L'application de base a été faite en vb.net avec Visual studio 2003.
En fais le code est dans une dll, avec une classe utilisateur.vb qui sert a faire la découverte de l'utilisateurcourant et une classe activedirectory.vb qui interroge l'active directory directement.
----------------------------------------------------------------------------------------------------------------------
Dans le web.config de l'application web il y a :
<!-- LIEN VERS ACTIVE DIRECTORY
Vous devez changer le lien vers le active directory selon vos besoin.
-->
<add key="lienAD" value="LDAP://DC=xxxx,DC=xxxx"/>
<add key="userAD" value="WEBAPP"/>
<add key="passAD" value="123456"/>
servant de passerelle entre l'application et le active directory.
----------------------------------------------------------------------------------------------------------------------
Ce qui est utilé dans les deux classes mentionner plus haut est ( :
----------------------------------------------------------------------------------------------------------------------
pour ActiveDirectory.vb :
Public Shared Function obtenirListeUtilisateurs() As ArrayList
obtenirListeUtilisateurs = New ArrayList
Dim de As DirectoryEntry = New DirectoryEntry(configServeurs.connectionAD, configServeurs.userAD, configServeurs.passAD)
Dim ds As DirectorySearcher = New DirectorySearcher(de)
ds.Filter = "(ObjectCategory=Person)" 'Rechercher des personnes
ds.PropertyNamesOnly = True
ds.PropertiesToLoad.Add("userPrincipalName") 'Charger le nom d'utilisateur
ds.PropertiesToLoad.Add("NativeGuid")
ds.Sort = New SortOption("name", SortDirection.Ascending) 'Trier en ordre alphabétique
Dim source As SearchResultCollection = ds.FindAll
For Each sr As SearchResult In source
Dim util As utilisateurAD
util.nom = sr.GetDirectoryEntry.Name.Substring(3) 'Nom de l'utilisateur
util.valeur = sr.GetDirectoryEntry.NativeGuid.ToString 'Numéro d'identification
obtenirListeUtilisateurs.Add(util)
Next sr
de.Close() 'Fermeture de la connexion
Return obtenirListeUtilisateurs
End Function
----------------------------------------------------------------------------------------------------------------------
et pour Utilisateur.vb
Public Shared Function utilisateurCourant(ByVal utilisateurEnMemoire As Utilisateur) As Utilisateur
utilisateurCourant = New Utilisateur
If Not utilisateurEnMemoire Is Nothing Then
utilisateurCourant.numero = utilisateurEnMemoire.numero
utilisateurCourant.nomUtilisateur = utilisateurEnMemoire.nomUtilisateur
utilisateurCourant.nom = utilisateurEnMemoire.nom
Else
Try
Dim ds As DirectorySearcher = New DirectorySearcher(New DirectoryEntry(configServeurs.connectionAD, configServeurs.userAD, configServeurs.passAD))
ds.Filter = "(|(&(objectCategory=user)(userPrincipalName=" & Principal.WindowsIdentity.GetCurrent.Name.Substring(Principal.WindowsIdentity.GetCurrent.Name.LastIndexOf("\") + 1) & "@*)))"
ds.PropertyNamesOnly = True
ds.PropertiesToLoad.Add("userPrincipalName") 'Charger le nom d'utilisateur
ds.PropertiesToLoad.Add("NativeGuid")
Dim source As SearchResult = ds.FindOne
Try
utilisateurCourant.nomUtilisateur = source.GetDirectoryEntry.Properties("userPrincipalName")(0).ToString
Catch ex As Exception
End Try
Try
utilisateurCourant.nom = source.GetDirectoryEntry.Name.Substring(3) 'Nom de l'utilisateur
Catch ex As Exception
End Try
Try
utilisateurCourant.numero = source.GetDirectoryEntry.NativeGuid.ToString 'Numéro d'identification
Catch ex As Exception
End Try
Catch ex As Exception
utilisateurCourant.nom = "Visiteur"
utilisateurCourant.nomUtilisateur = "Impossible de s'identifier"
utilisateurCourant.numero = ""
End Try
End If
If Not utilisateurCourant.nom = "Visiteur" Then
Try
utilisateurCourant.Groupes = _
utilisateurCourant.obtenirGroupesUtilisateur(utilisateurCourant.numero)
Catch ex As Exception
utilisateurCourant.Groupes = Nothing
End Try
End If
End Function
----------------------------------------------------------------------------------------------------------------------
En fait ce qui met demandez c'est de modifier les informations du web.config et de modifier les deux fonctions cité plus haut, tout en gardant leur appel, pour que l'authentification se face avec le login et le pass que les personnes utilisent lors de leur connection sur un ordinateur sans leur demandez lorsqu'il arrive sur la page.
J'ai essayé quelque petit trucs mais je n'ai pas réussi a obtenir l'utilisateur dans la dll (se que selon moi serai le mieux pour ne pas modifier l'appel des fonctions).
Cordialement,
Jo