Webbasierte Anwendung - Authentifizierung über LDAP/ActiveDirectory

L

lifeisbeautiful

Mitglied
Hallo zusammen,

ich schreibe meine Bachelorarbeit in einem Unternehmen und programmiere eine web-basierte Anwendung mit Java EE. Im Grunde ist die Anwendung auch so gut wie fertig. Jedoch fehlt mir noch eine letzte Funktionalität: Die Authentifizierung. Das soll über LDAP/Active Directory umgesetzt werden. Die Programmierung der Anwendung verlief ganz gut. Nur habe ich sehr große Wissens-Lücken bzgl. LDAP und Active Directory.

Im Active Directory hat mein Betreuer eine Gruppe angelegt. In dieser Gruppe sind alle Nutzer eingetragen, die in Zukunft Zugriff auf diese web-basierte Anwendung haben. Mein Vorhaben ist der Folgende:

Ich muss durch LDAP im Active Directory überprüfen, ob der Nutzer, der einen Login durchführen möchte, sich in dieser Gruppe befindet. Wenn ja, ist der Login erfolgreich, wenn nicht, dann hat er keinen Zugriff.

Dementsprechend muss auch überprüft werden, ob das eingegebene Passwort korrekt ist.

Ich habe einen Usernamen und Passwort, womit ich mich erst einmal in den LDAP-Server anmelden kann. Diese Anmeldeinformationen haben erst einmal nichts mit dem Login zu tun. Das ist nur für den Zugriff auf den LDAP-Server.

Das Prinzip ist mir zwar klar, aber ich um ehrlich zu sein nicht den blassen Schimmer, wie ich das angehen soll? Ich habe zuvor noch nie mit LDAP und Active Directory etwas zu tun gehabt. ich habe bisher lediglich nur Anwendungen geschrieben.

Nun weiß ich einfach nicht, wie das umgesetzt werden soll. Wie muss ich denn die Suche in LDAP umsetzen? Wie suche ich denn durch LDAP im Active Directory nach Usern bzw. Gruppen? Was muss ich beachten? Habt ihr eventuell Code-Beispiele für mich? Oder ein Buch, das mein Vorhaben einigermaßen gut beschreibt?

Ich freue mich über jeden kleinen Tipp.

Freundliche Grüße
 
J

JuKu

Top Contributor
LDAP ist in der Tat nicht das einfachste Thema.
Prinzipiell ist ein LDAP auch eine Art Ordner-Struktur (mal stark vereinfacht gesprochen), wobei jeder Ordner meist mit einem "cn=" anfängt. Und jetzt gibt es 2 Möglichkeiten:
Entweder du kennst den Ordner nicht und durchsucht quasi sämtliche Verzeichnisse nach dem User ab (ziemlich unpraktikabel und wird auch eig. fast nie gemacht) oder du kennst bereits den Ordner und suchst in dem Ordner nach dem User.

Prinzipiell ist das Vorgehen also wie folgt:
1. Anmelden beim LDAP Server (mit den Zugangsdaten des Nutzers --> dadurch weißt du schon, dass die Authentifizierungsdaten wie Username & Passwort stimmen) und
2. prüfen der Berechtigungen (also ob der Nutzer Mitglied in der Gruppe ist).

Hier mal ein älteres (und nicht ideales) Code-Beispiel für den Login, allerdings habe ich das nur zum Testen schnell zusammen gebaut:
https://github.com/JuKu/mmo-proxy-s...usoft/mmo/proxy/database/login/LDAPLogin.java
 
J

JuKu

Top Contributor
Oder noch ein besseres Code-Beispiel aus einem Open Source Projekt, bei dem ich selbst mitarbeite:
Java:
try (LdapConnection conn = new LdapNetworkConnection(host, port)) {
                //set timeout
                ((LdapNetworkConnection) conn).getConfig().setTimeout(TIMEOUT_LIMIT_SECONDS * 1000L);

                //login to ldap server
                conn.bind("uid=" + username + ",cn=users,cn=accounts,dc=example,dc=com", password);

                SearchRequest req = new SearchRequestImpl();
                req.setTimeLimit(TIMEOUT_LIMIT_SECONDS);
                req.setScope(SearchScope.SUBTREE);
                req.addAttributes("memberOf");
                req.setBase(new Dn("cn=users,cn=accounts,dc=example,dc=com"));
                req.setFilter("(&(uid=" + username + ")(memberOf=cn=" + groupName + ",cn=privileges,dc=example,dc=com))");

                SearchCursor cursor = conn.search(req);

                if (cursor.next()) {
                    //
                } else {
                    group = -1;//user is not in group
                    throw new BadCredentialsException("You don't have access to use this software!");
                }
                req.abandon();

                conn.unBind();
            } catch (InvalidConnectionException e) {
                throw new BadCredentialsException("LDAP server is down. Please try again later.");
            } catch (IOException e) {
                e.printStackTrace();
                throw new BadCredentialsException(ERROR_WHILE_AUTHENTIFICATING);
            } catch (LdapAuthenticationException ex) {
                throw new BadCredentialsException("Your credentials were not accepted!");
            }


        } catch (LdapException | CursorException e) {
            e.printStackTrace();
            throw new BadCredentialsException(ERROR_WHILE_AUTHENTIFICATING);
        }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Socket-Anwendung (BufferedWriter/Reader liest nicht aktuellen Wert) Netzwerkprogrammierung 6
R Anfängerbeispiel: Suche Java-Anwendung die http-Anfragen in Tomcat liest Netzwerkprogrammierung 8
B Webview für Anwendung Netzwerkprogrammierung 7
agent47 HTTP Grundstzfrage verteilte Anwendung Netzwerkprogrammierung 20
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
S HTTP Würdet Ihr Euch bei einer intern genutzten Anwendung auf Cookies verlassen? Netzwerkprogrammierung 2
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
P Kritische Java-Anwendung und Citrix veröffentlichen Netzwerkprogrammierung 1
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Client Anwendung mit zentraler SQL-Datenbank Netzwerkprogrammierung 3
C GWTEventService kleine Anwendung Netzwerkprogrammierung 1
T Peer-to-Peer Anwendung Netzwerkprogrammierung 2
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
P Java Web = Webside Anwendung Netzwerkprogrammierung 2
Ollek Socket Sucher passende Server/Client Lösung für meine Anwendung Netzwerkprogrammierung 2
S Socket Einfache Client/Server-Anwendung Netzwerkprogrammierung 11
Y einfache TCP/IP Anwendung Netzwerkprogrammierung 4
J Nachricht kommt erst nach beendigung der Anwendung an Netzwerkprogrammierung 4
K Mobile online Anwendung - Java mit SAP Netzwerkprogrammierung 2
W Server-Client Anwendung Netzwerkprogrammierung 2
E Erste Server-Client Anwendung Netzwerkprogrammierung 2
J Anwendung friert bei .listNames() ein! Netzwerkprogrammierung 11
P Proxy für Anwendung setzten Netzwerkprogrammierung 3
B Server / Client Anwendung, Client GUI Probleme Netzwerkprogrammierung 11
J Mit Java Anwendung ein (externes) Programm auf einem AIX Rechner starten Netzwerkprogrammierung 6
P Mp3s Streamen - Client-Server-Anwendung Netzwerkprogrammierung 17
D Javascript Funktion aus Java Anwendung ausführen Netzwerkprogrammierung 5
M Verteilte Anwendung - welche Technik? Netzwerkprogrammierung 31
I RMI Anwendung mit Zugriffsschutz versehen Netzwerkprogrammierung 8
A Verständnisproblem mit Client/Server-Anwendung Netzwerkprogrammierung 20
S Server - Client Anwendung Netzwerkprogrammierung 3
K RMI macht Anwendung langsam? Netzwerkprogrammierung 8
G Performance einer verteilten RMI-Anwendung Netzwerkprogrammierung 4
R proxy für java anwendung angeben [resolved] Netzwerkprogrammierung 15
F Authentifizierung gegen DomainController Netzwerkprogrammierung 13
X Netty TLS Authentifizierung Fehler Netzwerkprogrammierung 1
T Digest Authentifizierung Netzwerkprogrammierung 3
R HTTP Zweifaktor-Authentifizierung Netzwerkprogrammierung 2
R RMI Authentifizierung / Policy Netzwerkprogrammierung 2
M Authentifizierung beim Start von Java-Applets Netzwerkprogrammierung 2
xDarkSunx Kleine Frage authentifizierung Netzwerkprogrammierung 13
S Proxy Authentifizierung HtmlUnit Netzwerkprogrammierung 8
S Proxy Authentifizierung Netzwerkprogrammierung 3
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
M Authentifizierung Netzwerkprogrammierung 11
C Authentifizierung am Mailserver Netzwerkprogrammierung 3
B Digest Authentifizierung Netzwerkprogrammierung 2

Ähnliche Java Themen


Oben