SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Zugriff auf Active Directory

Unbeantwortet Dieser Beitrag hat 6 Antworten

Ohne Rang
76 Beiträge
coLami erstellt 18 Apr. 2013 09:10
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich will vom SP 2010 auf unsere Active Directory zugreifen.

Von lokalen Windows Forms Anwendungen aus ist das auch kein Problem, wohl aber vom SharePoint.

using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "blabla.de", "DC=blabla,DC=de","Benutzername","Passwort")) // Benutzername, Passwort sind bei den lokalen Anwendung nicht notwendig
                    {
                        // find user by display name
                        if (ctx != null)
                        {
                            //ret = ctx.Name + "|" + ctx.UserName + "|" + ctx.ConnectedServer;

                            UserPrincipal user = UserPrincipal.FindByIdentity(ctx, displayName);
                        }
                    }

funktioniert, hilft mir aber nichts, weil ich die Login-Daten jedes Benutzers nicht habe.

 

Kann man den SP irgendwie an die AD koppeln

Meine Versuche mit RunWithElevatedPrivileges etc sind bisher fehlgeschlagen.

 

Alle Antworten

Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 18 Apr. 2013 09:19
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Welche Informationen willst du denn aus dem AD auslesen?

Ohne Rang
76 Beiträge
coLami Als Antwort am 18 Apr. 2013 09:29
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Den DistinguishedName der jeweils angemeldeten Person

Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 18 Apr. 2013 09:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also ich verwende für den Zugriff auf das AD 2 Funktionen:

DSGet und DSQuery

Wenn du dich über die beiden Funktionen informierst, solltest du in der Lage sein deine Anforderung zu realisieren.

EDIT: Hier noch ein kleiner Tipp wie es funktionieren könnte:

string

 

 

userInfo = UseShell(" /c DSQUERY USER -samid " + userloginname + " -d " + userdomain);

userloginname und userdomain holst du dir einfach aus: SPContext.Current.Web.CurrentUser.LoginName

Ohne Rang
76 Beiträge
coLami Als Antwort am 19 Apr. 2013 12:30
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke für die Tipps,

ich werd mich in den nächsten mal damit befassen.

Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 19 Apr. 2013 14:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Von Sharepoint ist es genauso wenig ein Problem wie von Windows Forms.

Für SP würde folgendes empfehlen:

  1. im Visual Studio einen sequentiellen Workflow anlegen
    => somit wären über
            public Guid workflowId = default(System.Guid);
            public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();
    die Benutzerinformation des aktuellen Benutzers schon einmal vorhanden.
  2. im Active Directory einen Systembenutzer anlegen (lassen), der Leserechte auf Benutzerdaten hat
    => somit sind wir haben wir immer den gleichen Benutzerzugang, wenn wir etwas vom AD wollen
  3. die AD-Daten über spezialisierte Directory-Klassen lesen
    DirectoryEntry directoryEntry1 = new DirectoryEntry();
    DirectorySearcher directorySearcher1 = new DirectorySearcher();
    directoryEntry1.Path = @"LDAP://<SID=" + workflowProperties.OriginatorUser.Sid + ">";
    directoryEntry1.Username = <Name des neuen AD-Users, der Leserechte hat>;
    directoryEntry1.Password = <Passwort des neuen AD-Users, der Leserechte hat>;
    directorySearcher1.SearchRoot = directoryEntry1;
    directorySearcher1.Filter = @"(&(objectClass=user)(objectCategory=person))";
    //Eigenschaften hinzufügen, die man aus der AD haben möchte, Bsp.:
    directorySearcher1.PropertiesToLoad.Add("manager"); //enthält Vorgesetzten-Info
    directorySearcher1.PropertiesToLoad.Add("department"); //enthält Abteilung-Info
    SearchResult reslt;
    SearchResultCollection rslcol = directorySearcher1.FindAll();
Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 18 Apr. 2013 09:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe das schon öfter üebr System.DirectoryServices realisiert und das funktionierte bisher immer problemlos. Und Du mußt nicht mal einen DC fest angeben:

DirectoryEntry dirEntry = new DirectoryEntry("GC:");

Jetzt kannst Du darauf mit DirectorySearcher arbeiten und auslesen, was Du möchtest.

Viele Grüße
Andi
af @ evocom de
Blog