Babybaer Geschrieben 28. Juli 2010 Geschrieben 28. Juli 2010 VS 2010 C# .Net4.0 Hallo Leutz, mal wieder eine schöne Aufgabe zum Knobeln. Situation: Wenn sich ein User in meinem Firmennetzwerk anmeldet bekommt sein Client alle ihm zugewiesenen ADS-Gruppen aktualisiert. Diese können dann von verschiedenen Programmen abgefragt und zur Berechtigungsregulierung verwendet werden. So etwa in der Art: ist der Anwender in der Gruppe XYZ ( isInRole() ), dann darfst du Funktion A nutzen... Das funktioniert auch super. Nun möchte ich aber eine Einwahlsoftware auf den Clients einsetzen, die dann über die ADS-Gruppen verschiedene Berechtigung setzen soll. Z.B. Gruppe G_Auslandseinwahl. Und nun mein Problem: Da nun aber keine Netzwerkverbindung ins Unternehmen besteht wenn der Anwender sich im Ausland anmeldet, kann ich leider die oben beschriebene Funktionalität nicht verwenden. Was möchte ich: Auslesen der AD Gruppen im Offlinebetrieb. Use Global Catalog and CheckTokenMembership to check AD group membership NetInverse Developers Blog Das habe ich schon versucht, doch leider ist hier das selbe Problem das der GC nur auf den Domaincontrollern verfügbar ist. Ideen? Danke schon mal. Zitieren
Babybaer Geschrieben 28. Juli 2010 Autor Geschrieben 28. Juli 2010 DLL Import //Wird benötigt um die SID zu konvertieren. [DllImport("advapi32.dll", SetLastError = true)] public static extern bool ConvertStringSidToSid(string StringSid, out IntPtr ptrSid); //Prüft über die SID die Gruppe zum User [DllImport("advapi32.dll", SetLastError = true)] public static extern bool CheckTokenMembership(IntPtr TokenHandle, IntPtr SidToCheck, out bool IsMember); [/PHP] Die SID findet Ihr in der ADS. Jeder ADS-Gruppe ist eine SID zugeordnet. Diese bleibt in der Regel immer gleich. Zm solange an der ADS-Gruppe keine Änderungen durchgeführt werden. Um an die SID zu gelangen müsst Ihr entweder die ADS befragen. Oder Ihr legt die SID statisch auf dem Client ab, z.B in der Registry oder in einem File. So und so siehst dann die Methode aus um die Berechtigung zu prüfen. [PHP] public static bool SecurityRole(string strSID, bool bTrace) { try { IntPtr ptrSID = IntPtr.Zero; bool bIsMember = false; if(SID.ConvertStringSidToSid(strSID, out ptrSID) == true) SID.CheckTokenMembership(IntPtr.Zero, ptrSID, out bIsMember); return bIsMember; } catch (Exception objException) { //TODO.... return false; } } Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.