Springboot und LDAP - Authentifizieren gegen Gruppe

brunataner

Neues Mitglied
Hallo,
ich hoffe ihr könnt mir weiterhelfen.
Hier vor Ort haben wir ein AD in diesem gibt es eine Gruppe die nennt sich Monteure.
In der Gruppe gibt es viele Member Attribute und gegen diese muss ich prüfen.

Ziel ist es zu ermitteln ob es den User XY in der Gruppe gibt und falls ja Username und Password zu vergleichen.

Ich versuche das einmal vernüftig darzustellen:
LDAP-Struktur:
  • DC=Firma, DC=local
    • OU=Users
      • CN=Monteure
Struktur der Gruppe Monteure:
  • objectClass = group(strukturell)
  • groupType = top(abstrakt)
  • instanceType = 4
  • objectCategory = CN=Group,CN=Schema,CN=Configuration,DC=Firma,DC=local
  • cn = Monteure
  • member = CN=Mustermann Max,OU=IT,OU=Stadt,OU=User,DC=Firma,DC=local
  • member = CN=Musterfrau Maxim,OU=IT,OU=Stadt,OU=User,DC=Firma,DC=local
  • name = Monteure
  • sAMAccountName = Monteure
Mir ist nun nicht klar wie ich von dem Attribut Member der Gruppe Monteure zu den Attributen des Members komme, um mir da den Usernamen und das Password zu holen.

Mit einfachen OUs und dann den einzelnen untergeordneten Usern als CN klappt das aber bei Attributen einer Gruppe weis ich nicht nicht weiter...

Vllt. mag mir ja einer helfen.

Grüße aus dem Norden!
 
Was du möchtest ist, dich per LDAP Protokoll gegen das ActiveDirectory zu authentisieren.
Das erreicht man nicht, indem man sich Username und Passwort ausliest und vergleicht (hint: Das Passwort bekommst du sowieso nicht per LDAP Protokoll aus dem AD heraus), sondern was du willst, nennt sich LDAP "Bind" Operation. Lese dir vielleicht mal ein paar Artikel zu Spring boot mit LDAP durch. Vielleicht willst du auch noch Spring Security und LDAP.
 
Ich habe mir schon mehrere Sachen durchgelesen, z.B. StackOverflow oder guides von spring.io.
Ich steige da nur nicht so ganz durch... ich muss dazu sagen das ich mich erst seit knapp 3 Wochen mit Java und allgemein OOP beschäftige und auch von Spring noch keine Ahnung habe(kenne bisher nur prozedurale Programmierung) und ich soll mich jetzt nach und nach mit praktischen Projektaufgaben daran tasten.

Mein Ausbilder hat mir folgenden spring.io Guide gegeben https://spring.io/guides/gs/authenticating-ldap/
Anweisung ist dies Nachzubauen und dann auf unser LDAP umzukonfigurieren. Das Nachbauen hat auch geklappt und ich konnte mich gegen die Test.ldif Datei authentifizieren.
Nur weis ich nicht nicht wie ich das jetzt auf auf eine Gruppe übertragen kann...da unser LDAP anders aufgebaut ist als die Test.ldif.
In der Test.ldif wird nur gegen ein User getestet der die Attribute uid und password hat, diese werden dann geprüft(verschlüsselt wie auch klartext). Soweit verstehe ich das alles auch.
Aber wie kann ich sauber die Member der Gruppe prüfen?

Meine bisherige Idee war das ich mir den Pfad ziehe(also den Member) und dann anhand dessen dann die Credentials checken lassen, ein weiteres Problem ist nur das es bei uns im Ldap wohl kein Attribute Password gibt und ich nun dazu auch nicht weis wo ich das herbekomme...

Kannst du mir nicht bitte einfach einen Hinweis geben damit ich weiterkomme, sonst halte ich die Entwicklung der Middleware nur auf und bekomme vermutlich noch Ärger weil es zu langsam voran geht....
 
Ich saß auch schon öfters vor dem Problem (und habe sehr viel Zeit da rein investiert, bis es lief), aber es ist eig. ziemlich einfach. Da Code mehr sagt als 1000 Worte, hier mal ein Code Beispiel, wie du die Gruppen ausliest (unabhängig von Spring, Methode listGroups() ist für dich relevant):
https://github.com/JuKu/mmo-proxy-2...kusoft/mmo/proxy/frontend/ldap/LDAPLogin.java

EDIT:
Der Code ist nicht besonders toll, da es sich hierbei um einen Prototyp handelte. Aber das Prinzip solltest du wohl trotzdem verstehen können.

Spring hat auch noch einen vereinfachten LDAP Authentificator, der in deinem Link oben auch etwas beschrieben wird:
Java:
@Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .ldapAuthentication()
                .userDnPatterns("uid={0},ou=people")
                .groupSearchBase("ou=groups")
                .contextSource()
                    .url("ldap://localhost:8389/dc=springframework,dc=org")
                    .and()
                .passwordCompare()
                    .passwordEncoder(new LdapShaPasswordEncoder())
                    .passwordAttribute("userPassword");
    }
 
Zuletzt bearbeitet:

Zurück
Oben