Zum Inhalt springen

Eine AD-Gruppe einem User zuordnen


Empfohlene Beiträge

Geschrieben

Moinmoin,

ich brauche ein kleinwenig Unterstützung für mein Java-Projekt. Meine HQL-Abfragen laufen soweit, ich kann die User aus einer AD-Gruppe abfragen,...passt soweit alles. Allerdings stehe ich nun vor einem konkreten Problem dessen Ablauf folgender masen aussieht:

Wenn ein User bestimmte Kriterien erfüllt, wird ihm eine spezielle AD-Gruppe zugeordnet

Bei der nächsten Anmeldung bekommt er dann eine Meldung auf dem Bildschirm angezeigt, die er bestätigen muss

Das Bestätigungsdatum wird zurück in die Datenbank geschrieben

Die Gruppe wird dem User wieder entzogen

Mir geht es nun darum wie ich diese AD-Gruppe dem User zuordnen und wieder entziehen kann. Reicht es, wenn ich bei dem User einen zusätzlichen Eintrag mit dieser Gruppe mache oder muss ich da wirklich hin- und herkopieren? Bei uns im Betrieb kann mir da keiner so richtig Unterstützung geben, da dies eine komplett neue Anforderung ist. Gegoogelt habe ich auch schon, finde aber oft nur etwas zum Thema 'Infos aus AD auslesen'.

Ich möchte nicht dass man mir hier einfach fix und foxy den kompletten Code reinstellt ;) Es würde mir schon sehr helfen wenn jemand nützliche Links / Denkanstöße posten würde. thx a lot

Geschrieben

Servus,

Du sagst leider außer dem Stichwort "HQL" nichts über die verwendeten Technologien. Meine Kristallkugel sagt mir allerdings, dass Du mit Hibernate 2.5 ohne JPA arbeitest. Wenn das nicht der Fall ist, dann sag Bescheid, dann justier ich die Kugel entsprechend nach.

Bei Hibernate ist es so, dass Du bei einem einer aktuellen Hibernate Session zugehörigen (-> attached) Objekt arbeitest, wie Du sonst auch mit Objekten arbeiten würdest: Du änderst Attribute der Objekte. Das heißt in Deinem Fall, Du fügst die Gruppe hinzu oder entfernst sie. Wenn Du jetzt die Session verlässt / beendest, dann wird von Hibernate der Zustand der Objekte in den persistenten Zustand übernommen.

Bei Hibernate mit JPA ist das ganze marginal anders, aber das ist eine andere Geschichte. :)

Schöne Grüße,

Peter

Geschrieben

@kingofbrain: Es geht mir nicht um die HQL Geschichte!

Es geht mir um Java <->Active Directory!

Ich habe noch ein wenig gegoogelt und dabei folgendes gefunden:

memberOf is not a "real" attribute per se, meaning that it is read only, it contains "links" to groups and that it is constructed from all the groups that the user is a member of in that domain.

The reason why it has links to groups is to ensure referential integrity Eg. if you delete, rename or move a user, the group's membership is correctly maintained.

it is read-only, and if you attempt to modify it's values you wil get a LDAP Error of the form:

javax.naming.OperationNotSupportedException: [LDAP: error code 53 - 0000209A: SvcErr: DSID-031A0DD1, problem 5003 (WILL_NOT_PERFORM),data 0];

Was mir zu denken gibt ist der Satz "it is read-only"...! Bedeutet das, dass ich überhaupt nicht die Möglichkeit habe mit Java eine LDAP-Abfrage zu erstellen, welche den User der Active-Directory Gruppe zuordnet und wieder entfernt?

Geschrieben

Hallo,

ich habe mich vor längerer Zeit mal mit dem Thema beschäftigt und nach dem kramen im Hinterstübchen kam heraus, dass man der Gruppe dem User zuordnen muss und nicht dem User die Gruppe.

Lange Rede kurzer Satz: Der LDAP Gruppe muss der User über modify hinzugefügt werden.

Frank

Geschrieben

@robotto: Jo, da hast du recht. Falsche Formulierung meinerseits.

Und wenn du jetzt noch ein wenig mehr in deinem Hinterstübchen kramen würdest und mir noch zusätzlich zu meinem eigentlichen Problem 'nen guten Tip geben könntest? Es soll dir auch mir reichlich Kindersegen vergolten werden :)

Geschrieben

War zwar ein hartes Stück Arbeit aber zumindest bin ich mal soweit gekommen:

private void addUserToGroup(LDAPAccess ldapAccess) throws Exception {

try {

LdapContext ctx = new InitialLdapContext();

ModificationItem[] mods = new ModificationItem[1];

mods[0] = new ModificationItem(DirContext.ADD_ATTRIBUTE,

new BasicAttribute("member", userDN));

ctx.modifyAttributes(Name der Gruppe, mods);

ctx.close();

}

catch (NamingException e) {

System.err.println("User konnte der Gruppe (Name der Gruppe) nicht zugeordnet werden: " + e);

}

Im Parameter ldapAcces sind meine ganzen Anmeldeinfos für den LDAP-Server hinterlegt.

Leider springt mir das ganze immer in die Exception. Es liegt wahrscheinlich daran dass ich, irgendwo im Code, den ldapAccess mitgeben muss. Nur: Ich habe keinen Schimmer an welcher stelle genau...?? Peinlich :old

Geschrieben (bearbeitet)

Kann es sein das ich für's Hinzufügen und Entfernen des Users aus der Gruppe nicht das ctx.modifyAttributes() benötige sondern mit ctx.bind()/ctx.unbind() das ganze bewerkstelligen muss? Wäre super wenn jm. mir diese Frage beantworten könnte.

Zumindest rennt das ganze nun durch ohne Fehler. Ob die Aktuallisierung gelaufen ist kann ich noch nicht sagen, muss auf die Replikation des Servers warten. Mein aktueller Quellcode sind nun so aus:

private void addUserToGroup(LDAPAccess ldapAccess) throws Exception {

try {

ModificationItem[] modItem = new ModificationItem[1];

modItem[0] = new ModificationItem(DirContext.ADD_ATTRIBUTE,

new BasicAttribute("memberOf", userDN));

Hashtable ht = new Hashtable();

//Wird nur benötigt wenn man von extern zugreifen möchte

/*env.put(Context.INITIAL_CONTEXT_FACTORY,

"entsprechendes jar-File");*/

ht.put(Context.SECURITY_AUTHENTICATION, "simple");

ht.put(Context.SECURITY_PRINCIPAL, ldapAccess.getBrowseUser());

ht.put(Context.SECURITY_CREDENTIALS, ldapAccess.getBrowsePassword());

//Der entsprechende Domänen-Controller mit Port

ht.put(Context.PROVIDER_URL, "server : port");

LdapContext ctx = new InitialLdapContext(ht, null); ctx.bind("hier steht der entspr. dn", modItem);

}

catch (NamingException e) {

System.err.println("User konnte der Gruppe xxx nicht zugeordnet werden: " + e);

}

}

Bearbeitet von C#_Rookie
Geschrieben
Schau dir mal den Link an. Dort sind verschiedene Beispiele u. a. für User zur Gruppe hinzufügen und löschen.

Naming and Directory (JNDI) - JNDI, Active Directory and Group Memberships

Frank

@robotto: Und ich sah, dass es gut war! Vielen herzlichen Dank, hat funktioniert. Und das schöne ist, dass ich DirContext.ADD_ATTRIBUTE auch einfach in DirContext.REMOVE_ATTRIBUTE ändern kann...

Nur: Eine Zeile ist mir nicht ganz klar wofür sie steht/was sie macht. Das ich sie brauche ist mir klar, denn sobald ich sie auskommentiere funzt das ganze nicht mehr.

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...