Wie finde ich heraus, ob eine beliebige DOMÄNE \ Benutzername in einer bestimmten Rolle mit C # ist?

StackOverflow https://stackoverflow.com/questions/7393695

  •  29-10-2019
  •  | 
  •  

Frage

Ich bin wirklich neu in C #, also vergib mir meine Unwissenheit.Ich muss testen, ob sich ein Benutzer (DOMÄNE \ Benutzername) in einer bestimmten Gruppe befindet, und ja, dies schließt verschachtelte Gruppen ein.

Ich habe das gefunden WindowsPrincipal.IsInRole() funktioniert fantastisch, wenn es um den aktuell angemeldeten Benutzer geht.Das ist bei mir aber nicht der Fall.Ich muss in der Lage sein, eine beliebige DOMÄNE \ Benutzername oder UPN zu übergeben (ich werde das tun, was am einfachsten zu implementieren ist) und true / false zurückzuerhalten, wenn sie Mitglied der Gruppe X sind, auch wenn sie nur indirekt sind Mitglieder der Gruppe X (z. B:benutzer ist Mitglied der Gruppe Y und Gruppe Y ist Mitglied der Gruppe X).

Ich habe angeschaut WindowsIdentity, und vielleicht ist es neu in C #, aber ich habe einfach keinen Weg gesehen, so etwas zu tun WindowsIdentity("MYDOMAIN\User1").Nun, ich habe es getan, bin aber nie auch nur annähernd dazu gekommen, es zum Laufen zu bringen.

Wie kann ich mit C # bei einer DOMÄNE \ Benutzername, die nicht der aktuell angemeldete Benutzer ist, feststellen, ob sie Mitglied der DOMÄNE \ Gruppe sind?

War es hilfreich?

Lösung 4

Antwort auf eigene Frage:Ich habe die vorgestellten Lösungen ausprobiert und sollte sie nicht zum Laufen bringen.Beachten Sie, dass ich zu 100% sicher bin, dass dies auf meine Unerfahrenheit mit C # zurückzuführen ist und nichts mit dem zu tun hat, was die Kommentatoren gepostet haben.Liebe und Dank an alle Kommentatoren, die geholfen haben.

Was für mich funktioniert hat, ist das: http://ddkonline.blogspot.com/2010/05/how-to-recursively-get-group-membership.html

Ich musste einige grundlegende Änderungen vornehmen, um die obige Lösung an meine Situation anzupassen (z. B. die LDAP-Parameter ändern), aber es hat im Grunde funktioniert.Gibt true zurück, wenn Mitglied der Gruppe, sonst false.Ich hoffe, das erspart zukünftigen Suchenden ein paar Haare, da ich bereits eine Handvoll verloren habe.Nochmals vielen Dank an alle, die Hilfe gepostet haben.

Andere Tipps

Sie können dafür die LDAP-Abfrage verwenden.Hier ist ein guter Artikel

Howto:(Fast) alles im Active Directory über C#

Hier ist eine Funktion, die ich benutze, die funktioniert und Sie sollten sie so verwenden können, wie sie fast ist.Sie werden wahrscheinlich erstellen müssen ParseUserDomain aber das ist ziemlich einfach:

/// <summary>
/// Checks if a user in is a active directory group.
/// <summary>
/// <param name="username">Can contain the domain and username or just username
///    (eg. domain\username or username).  If no domain is specified, the default
///    domain is used.</param>
/// <param name="group">Active directory group to check.  Group name only.  No
///    leading domain as the domain from the user is used.</param>
/// <returns></returns>
public bool UserIsInActiveDirectoryGroup(string username, string group)
{
    bool isInGroup = false;
    string user = "";
    string domain = "";
    // Parses off domain and user to seperate values
    ParseUserDomain(username, out domain, out user);   

    if (string.IsNullOrEmpty(user) ||
        string.IsNullOrEmpty(domain) ||
        string.IsNullOrEmpty(group))
    {
        return false;
    }

    using (PrincipalContext ADContext = new PrincipalContext(ContextType.Domain,
        domain))
    {
        using (GroupPrincipal principalGroup = 
            GroupPrincipal.FindByIdentity(ADContext, group))
        {
            if (principalGroup != null)
            {
                using (UserPrincipal ADPrincipalUser = 
                    UserPrincipal.FindByIdentity(ADContext, user))
                {
                    // True means deep search
                    var users = principalGroup.GetMembers(true);
                    isInGroup = users.Contains(ADPrincipalUser);
                }
            }
        }
    }
    return isInGroup;
}

Ich antwortete mit einem rekursive Abfrage in einem ähnlichen Eintrag im Stapelüberlauf namens Finden Sie rekursive Gruppenmitgliedschaft (Active Directory) mit C#.Wenn Sie den Code ändern, den ich dort angegeben habe, können Sie tun, was Sie wollen.

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