[ASP.NET + C#] LDAP username vraag

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 18-09 07:59

Griffin

Is mythical

Topicstarter
Ik ben bezig met een systeem welke gebruik maakt van de LDAP.
Situatie is als volgt:

Bij het laden van mijn default.aspx haal ik de huidige web gebruiker op:
C#:
1
HttpContext.Current.Request.LogonUserIdentity.Name

Resultaat hiervan is: [DOMAIN][USER]
bijvoorbeeld: test\FGriffioen

Ik ga dan met die UserIdentity kijken of deze lid is van een ActiveDirectory Group
C#:
1
HttpContext.Current.Request.LogonUserIdentity.Groups


Ik doe dan het een en ander met de logonUseridentity name, dit gaat allemaal goed.

Maar nu komt het probleem waar ik mee zit.
Wat ik namelijk nu wil is op een aspx pagina een dropdownlist maken met hierin alle ActiveDirectory users. Hiervoor gebruik ik de volgende code:
C#:
1
2
3
4
5
6
7
8
9
        DirectoryEntry domain = new DirectoryEntry("LDAP://[DOMAIN].[EX]/OU=Medewerkers,DC=[DOMAIN],DC=[EX]");
        List<string> result = new List<string>();

        foreach (DirectoryEntry child in domain.Children)
        {
            result.Add(child.Name);
        }

        return result;


Ik krijg dan een lijst met de namen van de users, voorbeeld
code:
1
CN=Ferdy Griffioen


Nu kan ik begrijpen dat dat het resultaat is, want dat is mijn naam.
Maar kan dit niet gebruiken omdat ik straks moet gaan vergelijken tussen 'QBIT\GriffioenF' en 'CN=Ferdy Griffioen'.

Dus ik dacht ik haal ipv name de username op uit de ChildNode, misschien gaat dat beter. Ik heb dit gedaan dmv:
C#:
1
2
3
4
5
6
7
8
9
        DirectoryEntry domain = new DirectoryEntry("LDAP://[DOMAIN].[EX]/OU=Medewerkers,DC=[DOMAIN],DC=[EX]");
        List<string> result = new List<string>();

        foreach (DirectoryEntry child in domain.Children)
        {
            result.Add(child.Username);
        }

        return result;


Echter om 1 of andere vage reden zijn deze helemaal leeg.

Na wat nadenken zie ik 2 mogelijke oplossingen:
1.
Het uitlezen van alle users uit de AD is fout en dit moet ik fixen zodat de output het zelfde is als output van
C#:
1
HttpContext.Current.Request.LogonUserIdentity.Name

Echter ik ben al druk bezig geweest met zoeken en kan niet echt suitable voorbeelden oid vinden op het internet.

2.
Tijdens het uitlezen van mijn huidige webuser (dmv):
C#:
1
HttpContext.Current.Request.LogonUserIdentity.Name

deze user op 1 of andere manier koppelen aan een AD user en hier het een en ander mee gaan doen ipv wat ik nu doe. (dus ipv : "test\FGriffioen" werk ik dan met "CN=Ferdy Griffioen").
Echter dan moet ik ook gaan kijken of 'CN=Ferdy Griffioen' lid is van groepen op de AD en dit ook niet echt lukken.


Het lijkt me dat optie 2 beter is, maar hoe dit precies uitgevoerd moet worden is een raadsel bij mij.

Ik hoop dat jullie mede-tweakers kunnen helpen, en hoop ook dat ik genoeg info heb gegeven (anders hoor ik het wel).

[ Voor 6% gewijzigd door Griffin op 16-06-2009 13:25 . Reden: Info toevoegen ]


Acties:
  • 0 Henk 'm!

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 18-09 15:41

mOrPhie

❤️❤️❤️❤️🤍

Volgens mij zit de username wel in "DirectoryEntry.Properties":

http://msdn.microsoft.com...toryentry.properties.aspx

Waarschijnlijk moet je: DirectoryEntry.Properties["sAMAccountName"] hebben. Zie http://www.computerperfor...utes_active_directory.htm.

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


Acties:
  • 0 Henk 'm!

  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 18-09 07:59

Griffin

Is mythical

Topicstarter
mOrPhie schreef op dinsdag 16 juni 2009 @ 13:26:
Volgens mij zit de username wel in "DirectoryEntry.Properties":

http://msdn.microsoft.com...toryentry.properties.aspx

Waarschijnlijk moet je: DirectoryEntry.Properties["sAMAccountName"] hebben. Zie http://www.computerperfor...utes_active_directory.htm.
Yes dat deed het hem. Ik ga er vanuit dat het nu wel gaat lukken. (voor naslag werk op got, hier hoe ik het nu heb)

Oud
C#:
1
2
3
4
5
6
7
8
9
        DirectoryEntry domain = new DirectoryEntry("LDAP://[DOMAIN].[EX]/OU=Medewerkers,DC=[DOMAIN],DC=[EX]");
        List<string> result = new List<string>();

        foreach (DirectoryEntry child in domain.Children)
        {
            result.Add(child.Name);
        }

        return result;


Nieuw
C#:
1
2
3
4
5
6
7
8
9
        DirectoryEntry domain = new DirectoryEntry("LDAP://[DOMAIN].[EX]/OU=Medewerkers,DC=[DOMAIN],DC=[EX]");
        List<string> result = new List<string>();

        foreach (DirectoryEntry child in domain.Children)
        {
            result.Add(child.Properties["sAMAccountName"].Value);
        }

        return result;

Acties:
  • 0 Henk 'm!

  • SteeringWheel
  • Registratie: Augustus 2004
  • Laatst online: 17-09 22:13
Voor het vertalen van NT4 naar Distinghuised Name (en nog meer, guid, upn) bestaat ook de IADsNameTranslate interface (al werkt het zoals je het nu hebt ook) :)

A forum post should be like a skirt. Long enough to cover the subject material, but short enough to keep things interesting.


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

[offtopic]
Wil je je domain en groups wel hardcoden? Voor portability zou ik dat gewoon configurabel maken, desnoods in je web.config.
Nu kan ik begrijpen dat dat het resultaat is, want dat is mijn naam.
Maar kan dit niet gebruiken omdat ik straks moet gaan vergelijken tussen 'QBIT\GriffioenF' en 'CN=Ferdy Griffioen'.
Op naam gaan vergelijken is niet handig want je kan 2 users met dezelfde CN hebben. Ik zou gewoon vergelijken op de SID's die er afaik bijzitten. Als je dan gewoon de complete entries in je list opslaat hoef je maar 1x een call naar je LDAP-server te doen. Mocht je later meer gegevens nodig hebben in bijvoorbeeld je presentation layer dan hoef je deze methode ook niet aan te passen. :)

[ Voor 19% gewijzigd door AtleX op 16-06-2009 15:21 ]

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 18-09 07:59

Griffin

Is mythical

Topicstarter
AtleX schreef op dinsdag 16 juni 2009 @ 15:19:
[offtopic]
Wil je je domain en groups wel hardcoden? Voor portability zou ik dat gewoon configurabel maken, desnoods in je web.config.
True. Ik moet sowieso alles nog beter gaan maken en generaliseren, dus dat neem ik mee.
Op naam gaan vergelijken is niet handig want je kan 2 users met dezelfde CN hebben. Ik zou gewoon vergelijken op de SID's die er afaik bijzitten. Als je dan gewoon de complete entries in je list opslaat hoef je maar 1x een call naar je LDAP-server te doen. Mocht je later meer gegevens nodig hebben in bijvoorbeeld je presentation layer dan hoef je deze methode ook niet aan te passen. :)
Nu vergelijk ik dus niet op CN maar op username, en deze moet identiek zijn naar mijn weten. Dus dat maakt niet uit. op SID's vergelijken is een mogelijkheid, kijk ik ook even naar. De ehe entrie in mn list hoeft niet want ik heb geen verdere data (uit de LDAP) nodig in mijn presentation layer.
Bedankt voor je input iig

Acties:
  • 0 Henk 'm!

  • AlanSmithee
  • Registratie: Maart 2004
  • Laatst online: 07-07 23:38
Misschien verzin ik er nu te veel bij, maar ik heb het idee dat je de LdapMebershipProvider gebruikt met impersonate="true".

Als die al geconfigureerd is kan je dan niet gewoon Membership.GetAllUsers() gebruiken?
Pagina: 1