Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von aziegler
Thema: Active Directory-Abfrage tut nicht...
Am im Forum: Rund um die Programmierung

Kein Problem, bin ja froh, wenn ich auch mal helfen kann.

Bei mir ist das ein zweigeteiltes Programm, eins läuft clientseitig, eins serverseitig. Das hängt aber mit der Struktur hier zusammen und sollte bei deinem Problem nicht wichtig sein.

Zunächst einmal lese ich den aktuellen User aus:


string benutzer = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();

(Damit die Zeile funktioniert, benötigst du die Bibliotheken System.Security und System.Security.Principal im using-Statement)

Den wandele ich dann um, damit er für die WindowsIdentity später verwendet werden kann. Die benötigt nämlich den Usernamen in der Form "username@domäne.bla" (z.B. "max.mustermann@gesellschaft.com"). Hierfür benutze ich die Funktion "Stringmanipulation". "GetCurrent" liefert den User nämlich in der Form "Domäne\Username" zurück (also "Gesellschaft\Max.Mustermann").


benutzer = stringmanipulation(benutzer);
(...)


public string stringmanipulation (string benutzer)
		{
			int stringlaenge = benutzer.Length - 1;
			int cutoff = 0;
			string backslash = "\\";
				
			for (int i=0; i ≤ stringlaenge; i++)
			{
				if (benutzer[i].ToString() == backslash.ToString())
					cutoff = i;

			}

			string benutzerp2 = benutzer.Substring(cutoff+1,stringlaenge-cutoff);
			string benutzerp1 = benutzer.Substring(0,cutoff);

			benutzer = benutzerp2 + "@" + benutzerp1 + ".com";

			return benutzer;
		}

Jetzt habe ich den aktuellen User in der gewünschten Form.

Jetzt fülle ich eine String-Variable mit der AD-Gruppe, gegen die ich suche.


string adgroup = "AD-Gruppe";

Und jetzt teste ich dagegen mit dieser (selbstgeschriebenen) Funktion:


bool ergebnis = CheckWindowsIdentity(benutzer, adgroup);

(...)


public bool CheckWindowsIdentity(string user, string gruppe)
    {
        System.Security.Principal.WindowsIdentity wi = new WindowsIdentity(user);
        System.Security.Principal.WindowsPrincipal wp = new WindowsPrincipal(wi);

        bool ergebnis = wp.IsInRole(gruppe);

        return ergebnis;

    }

Und fertig. Ich hoffe, das hilft etwas.

Thema: Active Directory-Abfrage tut nicht...
Am im Forum: Rund um die Programmierung

Danke!

Für ganz simple Sachen (habe ich aus 'ner ADSI-Community) kann man aber auch über die WindowsIdentity gehen, zumindest wenn man in einer Windows Server 2003-Umgebung arbeitet.

Mit Hilfe des passenden Anmeldenamens (loginname@domain.do) kann man sich über System.Security.Principal eine WindowsIdentity und damit einen WindowsPrincipal erstellen und dort gibt's eine Funktion, die überprüft, in welchen Gruppen dieser User ist. Funktioniert etwas einfacher. Vielleicht hilft dir das ja auch.

Thema: Active Directory-Abfrage tut nicht...
Am im Forum: Rund um die Programmierung

Hallo zusammen.

Erstmal hoffe ich, dass hier das richtige Forum ist...

Ich möchte folgendes tun: Für ein größeres Programm (ein Web Service) benötige ich Infos aus dem Active Directory über die Benutzergruppen eines einzelnen Users. Genauer gesagt muss ich herausfinden, ob der User in einer bestimmten Gruppe drin ist oder nicht. Da das meine erste AD-Abfrage in einem C#-Programm ist, mag der Code holprig/merkwürdig aussehen...naja, er funktioniert ja auch nicht.

Die entscheidenden Teile sind diese hier:


public bool GetADUserGroups(string userName, string gruppe)
    {
        bool ergebnis = false;
        
        DirectoryEntry ebr = new DirectoryEntry("LDAP://DOMAINE.DO","DOMAIN_USER","PASSWORD");

/*(reicht hier ein normaler Domain User oder muss das ein Domain Admin sein??)*/
            
        DirectorySearcher search = new DirectorySearcher(ebr);

/*(das sind jetzt die verschiedenen Filtervarianten, die ich ausprobiert habe; sind alle mit Ausnahme der nicht auskommentierten mit Fehler abgebrochen)*/
        
        //search.Filter = String.Format("(cn={0})", userName);
        
        //search.Filter = String.Format("&(objectClass=user)(userprincipalname={0})", userName);

        //search.Filter = "&(objectClass=user)(userprincipalname=" + userName + ")";

        search.Filter = "(objectClass=user)";

/*(der Username wird übrigens in der Form "vorname.nachname", sprich der Login-Name, übergeben)*/
                      
        search.PropertiesToLoad.Add("memberOf");
        search.PropertiesToLoad.Add("samAccountName");
             
            foreach (SearchResult table in search.FindAll())
            {
                int groupCount = table.Properties["memberOf"].Count;

                logger.LogInfo(table.Properties["samAccountName"].ToString());

                if (table.Properties["samAccountName"].ToString() == userName)
                {

                    for (int i = 0; i < groupCount; i++)
                    {
                        logger.LogInfo(table.Properties["memberOf"][i].ToString());

                        if (table.Properties["mebmerOf"][i].ToString() == gruppe)
                        {
                            ergebnis = true;
                        }
                    }
                }
            }
       
       
        return ergebnis;
    }

Tja, und langsam fällt mir nicht mehr viel ein. Ich probiere weiter rum, aber ich komme mir vor wie einer, der im tief-trüben fischt...

Über Hilfe wäre ich sehr dankbar!