Frage

Ich habe eine Web-Anwendung, die gegen die Windows-Authentifizierung ausgeführt wird unser Active Directory. Ich habe eine neue Anforderung bekam einige persönliche Informationen über aus dem Active Directory-Eintrag zu ziehen. Was wäre der einfachste Weg sein, den Zugang zu diesen Informationen zu bekommen?

War es hilfreich?

Lösung

den Benutzer Zugriff direkt über eine Directory scheint, wie die einfachste Ansatz. Hier sind einige AD-bezogenen tidbits ich von meinem ersten AD-Projekt gelernt:

  • In einer URI, schreiben LDAP in Kleinbuchstaben. Sonst wirst du ein Geheimnis Fehler. Ich verbrachte mehr als einen Tag auf dieser deprimierenden Ausgabe ...
  • Um einen einzelnen Wert Eigenschaft zu löschen, setzen Sie auf einen leeren String, nicht null. Null verursacht eine Ausnahme.
  • Um eine mehrwertig Eigenschaft zu löschen, verwenden Sie die DirectoryEntry.Property.Clear () Methode.
  • Die Active Directory-Schema Referenz wird sagen, welche Daten ein Wert geben wird und ob es sich um Mehrwert oder Single-Wert.
  • Sie müssen nicht manuell Refresh () auf einem Directory aber wenn Sie es jemals verwenden und welche Eigenschaften Cache angeben, wissen, dass es nicht automatisch abgerufen werden alle anderen Eigenschaften in der Zukunft.
  • A COMException können Sie jederzeit absolut geworfen werden, um die Klassen in System.DirectoryServices verwenden. Halten Sie ein Auge auf diesen Versuch blockiert. Gehen Sie nicht davon nichts sicher ist.

Sie werden wahrscheinlich brauchen Directory benutzen, um Ihre Benutzer-Verzeichniseintrag zu erhalten, wenn Sie den Weg nicht kennen (was würden Sie nicht nur, indem er ihn angemeldet). Mit ihm ziemlich einfach war, aber die Macken in LDAP-Syntax passen; nämlich mit Nicht-ASCII zu codieren (und andere?) Zeichen. Der Suchbegriff Sie wahrscheinlich verwenden würde, wäre so etwas wie: (& (sAMAccountName = was auch immer) (class = user)) . Dies ist aus der Spitze von meinem Kopf und kann leicht falsch sein.

Die Active Directory-Schema Referenz wird nützlich. Verstehen Sie, dass das Schema kann modifiziert und erweitert werden (zum Beispiel die Installation von Exchange Postfachinformationen für die Benutzer hinzufügen).

AD Explorer ist ein nützliches Werkzeug, das Sie für das Debuggen verwenden können und Low-Level-AD Datenverwaltung. Ich habe es nützlich gefunden, wenn ich weiß, welche Eigenschaft ich festlegen mag, kann aber nicht das richtige Dialogfeld in dem AD-Management-Tool finden.

Andere Tipps

Sie können das folgende Snippet nützlich als Starter finden.

public static bool IsUserInGroup(string lanid, string group)
{
    DirectoryEntry entry = new DirectoryEntry("LDAP://" + LDAPPATH);
    if(entry != null)
    {
        entry.Username=@"LDAPUSER";
        entry.Password="LDAPPASSWORD";
        DirectorySearcher srch = new DirectorySearcher(entry);
        srch.Filter = String.Format("(&(objectClass=person)(sAMAccountName={0}))", lanid);
        srch.PropertiesToLoad.Add("memberOf");

        SearchResult result = srch.FindOne();
        if(result != null)
        {
            if(result.Properties.Contains("memberOf"))
            {
                string lookfor = String.Format("cn={0},", group.ToLower());
                foreach(string memberOf in result.Properties["memberOf"])
                {
                    if(memberOf.ToLower().StartsWith(lookfor))
                        return true;
                }
            }
        }
        return false;
    }
    throw new Exception(String.Format("Could not get Directory lanid:{0}, group{1}",   lanid, group));
}

Haben Sie einen Blick auf dem System.DirectoryServices-Namespace:

System.DirectoryServices Namespace

Ich habe eine Standard-LDAP-Bibliothek zum Abrufen von Informationen aus einem Active Directory-Server verwendet, aber man müßte zu überprüfen, ob die Daten, die Sie benötigen über den LDAP-Server Schema zur Verfügung steht. Im Allgemeinen können Sie alle Informationen in InetOrganizationalPerson gespeichert bekommen und die meisten Informationen zu der Gruppe bezogen (n) sie gehören.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top