AuthenticationDomainService | Benutzergruppen auslesen
-
Hallo,
wie oben schon betitelt, würde ich gerne die Benutzergruppen zum authentifizierten Benutzer auslesen (alle nicht nur die Primäre).
Wie bekomme ich den Bezug vom ActiveDirectorySchema "User" zu dessen Gruppen?
[EnableClientAccess] public class AuthenticationDomainService : AuthenticationBase<User> { // To enable Forms/Windows Authentication for the Web Application, // edit the appropriate section of web.config file. public User GetAuthenticatedUser() { User user = base.GetAuthenticatedUser(new WindowsPrincipal(WindowsIdentity.GetCurrent())); string[] tmp = user.Name.Split('\\'); DirectoryEntry entry = new DirectoryEntry("WinNT://" + tmp[0] + "/" + tmp[1]); user.FullName = entry.Properties["FullName"].Value.ToString(); user.Groups = ??? return user; } }
-
Hat wirklich niemand eine Idee bzw. stand selbst schon vor dieser Anforderung?
-
FrEEzE2046 schrieb:
Hat wirklich niemand eine Idee bzw. stand selbst schon vor dieser Anforderung?
Willst du jetzt ein "Ich habe noch nie sowas gemacht" hören?
Ich weiss nicht mal so recht, worum es geht. Wenn ich aber nach deinen Begriffen suche, dann bin ich relativ schnell bei dem hier gelandet:
http://www.codeproject.com/KB/dotnet/usergroupmembership.aspxIst es das, was du suchst?
Grüssli
-
Dravere schrieb:
Ist es das, was du suchst?
Danke dir für deine Antwort. Das ist leider nicht wirklich, was ich suche. Ich habe den authentifizierten Benutzer bereits über base.GetAuthenticatedUser geladen.
Mit Hilfe dieses Users kann ich sogar weitere Eigenschaften wie "LastLoginTime" etc. auslesen. Es ist sogar möglich sich die "PrimaryGroupID" zu holen.
Es widerspricht nur - aus meiner Sicht - jeglicher Logik, wenn ich trotzdem eine LDAP-Query absetzen muss und quasi so tue, "als würde ich von nichts wissen".Verstehst du was ich meine? Ich habe den Benutzer ja bereits, warum muss ich nochmal die Active Directory nach ihm durchforsten, nur um die Assoziation zu seinen Gruppenmitgliedschaften zu bekommen?!
-
Stichworte zum googeln: active directory memberof
-
Ich habe das Beispiel von dieser Seite exakt so verwendet:
string GetADUserGroups(string userName) { DirectorySearcher search = new DirectorySearcher(); search.Filter = String.Format("(cn={0})", userName); search.PropertiesToLoad.Add("memberOf"); StringBuilder groupsList = new StringBuilder(); SearchResult result = search.FindOne(); if (result != null) { int groupCount = result.Properties["memberOf"].Count; for(int counter = 0; counter < groupCount; counter++) { groupsList.Append((string)result.Properties["memberOf"][counter]); groupsList.Append("|"); } } groupsList.Length -= 1; //remove the last '|' symbol return groupsList.ToString(); }
Abgesehen von dem kleinen Fehler, dass hier immer "groupsList.Length -= 1" gemacht wird und es daher ggf. eine Exception gibt, schien der Code für mich in Ordnung zu sein.
Das Problem ist, dass ich jedoch für ein Konto, was definitiv mehreren Domänen-Gruppen zugeordnet ist, immer als einziges Ergebnis
CN=Domänen-Benutzer,CN=Users,DC=mydomain
Was mache ich noch falsch?