Tomcat: "Form based authentication" mit zusätzlichen Parametern

MartinLeim

Grünschnabel
Hallo zusammen.

Ich arbeite mit Tomcat und einer "Form based authentication" für bestimmte Bereiche. Beim Login soll der Besucher eine Quelle seiner Logindaten auswählen können (z.B. Adressbuch, Datenbank, etc.). Dies macht ja erforderlich, dass ich mehr als die zwei Parameter j_username und j_password übergebe.

Leider habe ich trotz intensiver Recherche keine Lösung gefunden, einen zusätzlichen Parameter weiterzugeben, den ich dann in meinem JAAS-LoginModule auswerten kann.

Kennt da jemand eine Möglichkeit?

Danke im Voraus!
 
Hallo!

Wie wäre es denn, wenn du zwischen dem Forumlar und "j_security_check" noch eine Zwischenschicht (Filter) hinzufügst welche die Anfrage Parameter übernimmt und einfach an j_security_check weiterleitet. Unter der Annahme, dass das durchlaufen der JAAS Routine im selben Thread läuft wie der der sich um die Anfragebearbeitung kümmert könntest du beispielsweise in diesem Filter dein zusätzliches "Quell"-Attribut irgendwo in einer ThreadLocal Klassenvariable speichern (static). Dann hättest du auch von LoginModule aus Zugriff. Wie gesagt das funktioniert nur wenn das ein und der selbe Thread wäre... versuchs einfach mal.

Gruß Tom
 
Erstmal danke für die schnelle Antwort.

Puh, dass muss ich erst einmal verdauen. Was J2EE und Tomcat angeht, bin ich leider ziemlicher Anfänger (arbeite heute eigentlich zum ersten Mal damit).

Zur Zeit arbeite ich mit einem Javascript, das den dritten Parameter im Namen kodiert und mein LoginModule dekodiert diesen String dann. Funktioniert zwar, aber ist nicht sehr sauber, und hat das Problem, dass der Besucher Javascript aktiviert haben muss.

Dein Vorschlag baut serverseitig auf, was insofern schonmal ganz gut ist, aber um zu verstehen, was genau du mir sagen wolltest, fehlt mir noch das grundlegende Verständnis von Tomcat.
Aber morgen ist ja auch noch ein Tag :)
 
So, hat etwas länger gedauert, hatte noch etwas anderes, dringerendes zu tun.

Ich habe mich jetzt für die JavaScript-Lösung entschieden, da im Anwendungsfall der Benutzer ohnehin Javascript braucht.
 
Hallo Tom,

wie ich weiter oben gesehen habe schlägst du die gleiche Lösung vor, wie ich sie gerade umzusetzen versuche. Ich muss auch ein zusätzliches Feld beim Login mitschicken und versuche dieses Feld dann im Filter mit dem Benutzernamen zu verknüpfen. Leider scheint es so, als würde der Tomcat(5.5.9) es nicht erlauben einen Filter zwischen Login-Seite und j_security-check zu setzen. Gibt es für diese Problem vielleicht doch eine Lösung?

Bis jetzt habe ich es nur geschafft den Filter bei folgender Konfiguration aufzurufen:

Code:
<filter>
        <filter-name>AuthenticationOrgAppender</filter-name>
		<filter-class>com.MemoryTest.filter.LoginFilter</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>AuthenticationOrgAppender</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

Das url-Pattern sollte aber eigentlich "j_security_check" sein. Da passiert aber gar nichts.

Hier noch meine doFilter-Methode:

Code:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
		throws IOException, ServletException {
		filterConfig.getServletContext()
        .log(":: PostLoginFilter - doFilter");
		
		String username = (String) request.getAttribute(USERNAME);
		String organisation = (String) request.getAttribute(ORGANISATION);
		if(organisation!=null && organisation.length()>0)
			username = username + DELIMITER + organisation;
		
		request.setAttribute(USERNAME, username);
		chain.doFilter(request, response);
	}

Für einen kleinen Tip wie ich das lösen könnte wäre ich sehr dankbar.

Gruß
Christian
 
Hallo,

einerseits beruhigt es, dass diese Problemstellung ausnahmsweise nicht nur bei uns auftritt, gleichzeitig beunruhigt es aber auch massiv, dass es noch nicht allzu viele Lösungen dafür gibt :rolleyes: ..

Thomas Idee ist die Naheliegendste, allerdings hab ichs noch nicht geschafft, etwas Brauchbares zum Laufen zu bringen.

Ich würd mich gern mit euch austauschen, wie ihr das vor langer Zeit gelöst habt. Wenns noch jemand schafft, die alten Lösungen(Ideen) rauszukramen, bin ich mehr als dankbar!

Vielen Dank!
 
Hallo,

Ich habe schon eine ganze Weile gebraucht, um mal eine Webseite oder einen Thread zu finden, der sich damit befasst.

Auch ich habe das Problem mit Tomcat und dem JAASRealm, über j_username und j_password hinaus noch Parameter an ein LoginModul übergeben zu wollen. Beispielsweise im Rahmen von Mandantenfähigkeit einer WebAnwendung denke ich hier an eine weitere Kennung, welche die Benutzer sozusagen gruppiert.

Mein erster Gedanke war sogar, den JAASRealm möglicherweise zu erweitern bzw. den JAASCallbackhandler. Aber das ist wahrscheinlich keine gute Idee, bzw. sehr aufwendig.

Die etwas unschöne Alternative, per JavaScript einen Parameter mit dem Benutzernamen zu verbinden, wollte ich noch nicht weiter in Betracht ziehen.

Gibt es in mittlerweile andere Herangehensweisen?
Ist die Option "Filter" immernoch die empfehlenswerteste? Gibt es zu dem Thema evtl. gute Anleitungen?
(werde mich später damit befassen, für heute fehlt mir nun der freie Kopf)

Gruß,
Peter
 
einerseits beruhigt es, dass diese Problemstellung ausnahmsweise nicht nur bei uns auftritt, gleichzeitig beunruhigt es aber auch massiv, dass es noch nicht allzu viele Lösungen dafür gibt :rolleyes:

[offtopic level="slight"]
Das liegt wahrscheinlich da dran, dass keiner JAAS benutzen mag und es ein paar wesentlich bessere Alternativen gibt. Ich habe bisher keinen getroffen, der nur ein annähernd gutes Wort über JAAS verlieren wollte.
[/offtopic]

Gruß
Ollie
 
Vielleicht hast Du ja zu dieser Aussage noch den ein oder anderen Hinweis.

Ich meine, wenn es gute Alternativen gibt, mit denen sich die Authentifizierung in Tomcat einbinden lässt, dann kannst Du doch bestimmt auch mit einer kurzen Anleitung oder einem Link zu hilfreichen Tutorials oder ähnlichem weiterhelfen.

Gruß,
Peter
 
Sicher, ich wollte nur nicht gleiche einen Flamewar lostreten, kann ja sein, dass JAAS projektgegebn ist und gar nicht zur Debatte steht. Mein Favorit, was Security Frameworks angeht: http://www.acegisecurity.org/

Speziell zur Tomcat Integration: http://www.acegisecurity.org/guide/springsecurity.html#ca-tomcat <- Biegt die Tomcat Authentifizierung nach Acegi um

Ansonsten kann das gute Stück gegen nahezu alles Authentifizieren, was so im Securityuniversum rumfliegt: von einfacher HTTP Basic über ein DAO oder X509 Zertifikate - http://www.acegisecurity.org/guide/springsecurity.html#authentication

Ainfach mal runterladen und ausprobieren. Das Tutorial ist relativ gut erklärt und zugänglich. Kapitel I der Referenzdoku sollte man allerdings lesen, bevor mal loslegt.

Nicht von dem etwas umfangreicheren Konfigurationsfile abschrecken lassen. Das ist dem Fakt geschuldet, dass bisher keiner Zeit gefunden hat die Standardkonfiguration hinter Spring Namespaces zu verstecken. Im Allgemeinen kann man mit dem Standardkonfigurationsfile arbeiten und passt 2 oder 3 Stellen an und es tut.

Gruß
Ollie
 
Zurück