Récupérer infos ActiveDirectory pour utilisateur courant

Signaler
Messages postés
6
Date d'inscription
mardi 24 avril 2007
Statut
Membre
Dernière intervention
9 juillet 2007
-
Messages postés
1
Date d'inscription
jeudi 24 juillet 2008
Statut
Membre
Dernière intervention
24 avril 2010
-
Bonjour à tous,

tout d'abord j'utilise Visual Studio .NET 2003 et framework 1.1


je souhaite mettre en place une gestion des droits d'accès sur une application web.
les utilisateurs étant déjà identifiés (ils ont déjà entrés leurs identifiants sur windows
et sont référencés sous Active Directory implanté sur le réseau Intranet),
il n'est donc pas nécessaire de les faire retaper des mots de passe à l'arrivée sur le site.
Ainsi je souhaite pour établir un controle transparent pour l'utilisateur. Je souhaite récupérer les données de l'utilisateur qui se connecte, notamment son login Active Directory (le SAMAccountName si je ne me trompe pas).
Or tout ce que j'ai trouvé au sujet d'active directory et de diverses méthodes d'accès
à celui-ci permet de manipuler les entrées active directory mais pas d'obtenir les
informations que je souhaite pour l'utilisateur courant.


Existe il des méthodes ou des propriétés issues du framework ou du server IIS pour obtenir le login Active Directory de l'utilisateur connecté ? ( genre System.Environment.UserName )


L'espace de noms System.DirectoryServices me permettrait-il de résoudre mon problème ou
ne sert-il qu'à effectuer des recherches et à manipuler les entrées AD ?


En esperant que tout cela vous inspire et merci de m'avoir lu en tout cas.

8 réponses

Messages postés
79
Date d'inscription
lundi 28 octobre 2002
Statut
Membre
Dernière intervention
21 octobre 2008

Je travail pas mal avec Active directory pour les applis Intranet donc voici une premier code pour récuperer l'indentifiant window (attention il y a une case à cocher sur IIS pour pouvoir récupere les ServerVariables):

Dim
user

As



String






' Authentification Digest sur iis

user = Request.ServerVariables(

"REMOTE_USER"
)


Dim
RecupUser()

As



String

RecupUser = user.Split(

""
)
user = RecupUser(RecupUser.Length - 1)

Ensuite j'ai une classe ActiveDirectory que je déclare ensuite

Dim objPersonne
As
New clsActiveDirectory (user)

' verif les autorisations
If objPersonne.AppartientA(user, WebConfigurationManager.AppSettings(
"Applicatif").ToString) =
False
Then
   Response.Redirect(
"Refus.aspx")

End
If

cette vérif permet de savoir si la personne appartient au groupe d'utilisateurs qui ont droit d'utiliser l'appli Intranet.

voici pour info mes 2 méthodes utilisées de ma classe :

Public
Sub New(
ByVal LeLogin
As
String)

' Cherche les Informations Sur le Compte suivant le Login Transmis
Dim searcher
As
New DirectorySearcher(rootEntry)

' Mettre ici les valeurs des différents attributs
searcher.PropertiesToLoad.Add(
"cn")
searcher.PropertiesToLoad.Add(
"givenname")
searcher.PropertiesToLoad.Add(
"sn")

searcher.Filter =

"(&(anr=" & LeLogin &
")(objectCategory=person))"

Dim results
As SearchResultCollection
results = searcher.FindAll()

If results.Count > 0
Then
   Dim result
As SearchResult
   
For
Each result
In results
      LoginRecherche =
CStr(result.Properties(
"cn")(0)).ToUpper
      CheminPersonneRecherche =
CStr(result.Path)   

      Try
         NomRecherche = Trim(
CStr(result.Properties(
"sn")(0))).ToUpper
      
Catch ex
As Exception
         NomRecherche =
""
      End
Try

      Try
         PrenomRecherche = Trim(
CStr(result.Properties(
"givenname")(0)))
      
Catch ex
As Exception
         PrenomRecherche =
""
      End
Try

   Next
End
If

End
Sub

Public
Function AppartientA(
ByVal LeLogin
As
String,
ByVal NomGroupe
As
String)
As
Boolean
   ' recherche les groupes de la personne
   Dim searcher
As
New DirectorySearcher(rootEntry)

   searcher.PropertiesToLoad.Add(
"memberOf")
   searcher.Filter =
"(&(anr=" & LeLogin &
")(objectCategory=person))"

   Dim results
As SearchResultCollection
   results = searcher.FindAll()
   
   
Try
      If results.Count > 0
Then
         Dim result
As SearchResult
         
For
Each result
In results
            
Dim NbCollection
As
Integer
            NbCollection = result.Properties(
"memberOf").Count
            
For i
As
Integer = 0
To NbCollection - 1
               
Dim CheminGroupe
As
String = Trim(
CStr(result.Properties(
"memberOf")(i)))
               
If CheminGroupe.IndexOf(WebConfigurationManager.AppSettings(
"LDAPGroupes").ToString) >= 0
Then
                  CheminGroupe =
"LDAP://" & CheminGroupe
                  
Dim groupEntry
As DirectoryEntry =
New DirectoryEntry(CheminGroupe)
                  
' renvoi oui s'il appartient au groupe
                  If groupEntry.Name.IndexOf(NomGroupe) >= 0
Then
                     Return
True
                  End
If
               End
If
            Next
         Next
      End
If
   Catch ex
As Exception

   End
Try

   Return
False
End
Function

 
Messages postés
43
Date d'inscription
lundi 17 décembre 2007
Statut
Membre
Dernière intervention
29 avril 2010

Bonjour,

Ton code est fort intéressant et va dans le sens de ma recherche.
As ton avis est il aussi possible de gérer des droits avec les groupes d'AD, notamment sur des objets "menu" ?

Merci par avance
Messages postés
43
Date d'inscription
lundi 17 décembre 2007
Statut
Membre
Dernière intervention
29 avril 2010

Autre souci. VS2008 ne reconnais pas le clsActiveDirectory de "Dim objPersonne As New clsActiveDirectory(utilisateur)" Y-a t'il un namespace spécifique a importer ?
Messages postés
79
Date d'inscription
lundi 28 octobre 2002
Statut
Membre
Dernière intervention
21 octobre 2008

Excuse, clsActiveDirectory est une classe que j'ai créé dans App_Code car je fais beaucoup de chose avec l'Active Directory.

Pour ta classe, il faut :
Imports

System.Web.Configuration

Imports System.DirectoryServices

et le DirectoryServices doit être monté dans ton web.config en rajoutant la référence .Net.

Pour les droits pas de problème avec les groupes, personnellement c'est ce que je fais avec mes applicatifs Intranet.
Messages postés
43
Date d'inscription
lundi 17 décembre 2007
Statut
Membre
Dernière intervention
29 avril 2010

Finalement je suis passé parle code de Microsoft.
Merci de ton aide quand même
Messages postés
43
Date d'inscription
lundi 17 décembre 2007
Statut
Membre
Dernière intervention
29 avril 2010

Mon problème maintenant est comment gérer les rôles et les droits pour les utilisateurs ?
Sachant que j'ai un menu créé sur une base xml (sitemap) et que donc mes utilisateurs sont stockés sur l'AD ?

merci par avance
Messages postés
43
Date d'inscription
lundi 17 décembre 2007
Statut
Membre
Dernière intervention
29 avril 2010

up !
Messages postés
1
Date d'inscription
jeudi 24 juillet 2008
Statut
Membre
Dernière intervention
24 avril 2010

salut tout le monde,
stp je veux recupere juste les information de user conecté sur une page asp.net!mais j'arrive pas!
merci
nb:comment activer Servervariable dans mon iis