SSO über Windows NT/LDAP credentials

Ashaman

Mitglied
Hallo,

ich arbeite an einem Projekt und habe die Aufgabe unser Programm insofern zu modifizieren, dass es den
Angemeldeten Benutzer abfragt zur Authentifizierung. An sich erscheint es am sinnvollsten, dass die Authentifizierung
automatisch mit den vom Nutzer angegeben Daten beim Windows Login erfolgen sollte. Beim Programm würde sich
dann eine Auswahl für "anmeldung über lokal/ldap" anbieten.

An sich entspricht mein Problem diesem Thread nur dass es um eine rein Javabasierte Lösung geht und ich eben
eine Vorauswahl für die Abfragemethode ermöglichen muß.
http://www.tutorials.de/forum/enter...ng-co/288408-sso-webapplikation-moeglich.html

Nach einiger Recherche bin ich schlichtweg etwas verloren.
Deswegen wollte ich um hilfe bitten. Vielleicht hat sich jemand schon mal mit dem Thema auseinander gesetzt.
Bisher habe ich mir JAAS, nen bissl JGSS, Kerberos und JNDI angeschaut. Allerdings fehlt mir immer noch der Ansatz.

1. Ich habe auch keinen schimmer wie ich die Windows Credentials nutzen kann damit der Nutzer seine Daten
nicht erneut angeben muß.
2. Mir ist auch etwas schleierhaft wie ich die Rolle des angemeldeten Benutzers ermitteln kann

Wichtig ist das es eine rein clientseitige Lösung sein muß.
Mir ist es nicht erlaubt irgendwelche tools/dienste auf den Servern zu installieren.

Danke euch vielmals für jede hilfe. In dem Bereich bin ich noch ein Neuling.
 
danke schon mal für deine schnelle reaktion :)

Allerdings scheint mir der Ansatz nach erstem Lesen von meine Situation ungeeignet, da es
um Web-Apps geht und des Weiteren ein "third party" framework ist.
Sag mir bitte sollte ich es mißverstanden haben.

Wie gesagt such ich einen rein auf Java basierenden Ansatz für ein Java-Programm, dass auf einem
Rechner in einer Domain betrieben wird. Änderungen am AD sind nicht möglich oder nur minimal.

Hauptsächlich geht es mir darum entweder den aktuell angemeldeten Benutzer zu erfahren und seine Rollen/Rechte
oder den aktuell angemeldeten Benutzer mit seinen beim Login angegeben Daten ohne erneute angabe von
Account/Password am LDAP zu authentifizieren.

Eine grobe Richtung(vielleicht auch nen bissl genauer), ein Link zu tut/lib's oder ein Tip mit welchen Klassen ich
da ran komme wäre unglaublich hilfreich.
 
Vielleicht suchst Du so etwas?
Sun Doku: http://java.sun.com/j2se/1.5.0/docs...om/sun/security/auth/module/package-tree.html
Deutsche Doku: http://www.dpunkt.de/java/Programmieren_mit_Java/Sicherheit/14.html

Allerdings dabei beachten: http://lkamal.blogspot.com/2008/09/eclipse-access-restriction-on-library.html
sonst meckert dein Eclipse erstmal.

Java:
package de.tutorials.sso;
import com.sun.security.auth.module.NTSystem;
import com.sun.security.auth.module.NTLoginModule;

public class UserName {

	public static void printUserInfo() {
		NTSystem system = new NTSystem();
		System.out.println("User's name: " + system.getName());
		System.out.println("User's domain: " +system.getDomain());
	}
	
	public static void main(String[] args) {
		printUserInfo();
	}	
}
 
Ja das hilft mir wirklich für einen der Fälle.
Für die lokale Variante ist das schon ideal und ausreichend, wenn ich noch die Benutzerrolle finde.

Ich les mich jetzt erst mal ein in die entsprechenden Klassen.
Hast du zufällig noch einen Tip wie ich aus der primaryGroupID den Gruppennamen erhalten
bzw. aus den GroupSID's.
Meine google suche hat bisher nur unbeantwortete Threads geliefert oder es ging Richtung LDAP abfragen mit JNDI.
Ist das die richtige Richtung?

Wie gesagt, bin in diesem Javabereich ein absoluter Neuling...
 
Hallo,

huch sorry, hab überlesen, dass du keine WEBApp baust. Willsts du nur überprüfen, ob der Benutzer in einer bestimmten AD Gruppe drin ist?
Wenn ja könntest das über eine LDAP Abfrage realisieren, die als Suchfilter den aktuellen Benutzer und die notwendige Gruppe enthält.
Wenn die Suchabfrage dann ein Ergebnis zurück liefert, dann ist ist der User in der gewünschten Gruppe.

schau mal hier:
http://www.tutorials.de/forum/java/222137-netzwerksache-aus-benutzername-werde-vor-und-nachname.html
http://stackoverflow.com/questions/570466/java-ldap-determine-if-user-in-a-given-group
http://waffle.codeplex.com/
http://support.microsoft.com/kb/297951
http://www.windowsitpro.com/article...roupid-in-dsquery-you-only-see-a-number-.aspx

LDAP Abfragen kann man auch recht bequem über Springs LdapTemplate durchführen:
http://www.tutorials.de/forum/java/242231-ldap-interaktion-leicht-gemacht-mit-ldaptemplate.html

Gruß Tom
 
danke :)

ich les mich grad durch die Dokus und Versuche das eine oder andere.
Bisher sieht es so aus als wäre das alles gut nutzbar um mein Problem zu lösen.

Ich melde mich sobald ich einen genaueren überblick habe.
 
Vielen Dank noch mal für eure Hilfe.

Mit Waffle konnte ich viele der mir gestellten Aufgaben lösen.
Eine alternative hätte ich in JAAS und JNDI gesehen allerdings wäre diese Lösung für meinen
speziellen fall problematisch geworden (rechte und co).
 
So nach reichlich Arbeit funktioniert fast alles.

Allerdings habe ich ein Problem.
Die Anmeldung an eine Domäne (logonDomainUserEx) funktioniert nur mit dem aktuell an Windows angemeldeten Account.

Ich benutze für diesen Teil Waffle 1.3, welches die Advapi32 api nutzt.
Versuche ich einen anderen account mit korrekten Daten anzumelden bekomme ich immer diesen Fehler geworfen:
"Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt"
Dagegen funktioniert der vom System angelegte Administrator-Account bei der Anmeldung.

Nach google Suche kann ich sagen, dass es nicht an einer Umbennung der entsprechenden Konten liegt.
Ich hab viel versucht aber komme bisher noch nicht auf die Lösung.

Kennt sich jemand mit Waffle bzw. Advapi32 aus und kennt den Fehler?

Edit:

Der Fehler wird in dem Teil des Logonprozesses ausgelöst:
Code:
    public WindowsIdentityImpl(HANDLE windowsIdentity) {
        userGroups = Advapi32Util.getTokenGroups(windowsIdentity);
        windowsAccount = Advapi32Util.getTokenAccount(windowsIdentity); // Diese Funktion führt zu dem genannten Fehler
    }

Mir war es möglich durch eine alternative abfrage das für mich nötige zu Ermitteln.
Allerdings würde ich gerne verstehen warum in meiner Testumgebung es zu diesem Problem kommt.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück