Grundatzfrage: SOAP und Authentifizierung

Hallo alle zusammen,

ich möchte einen SOAP-Webservice mit JAX-WS in Java programmieren.
Der Webservice soll über User-Accounts Informationen bereitstellen.

Und genau da stelle ich mir die Frage:
Welche Möglichkeiten der Authentifizierung in SOAP gibt es?
Ich weiß was ich nicht möchte:
1. Ich möchte keine reine HTTP-Authentifizierung die mein Application-Server (Tomcat) leisten muss. D.h. ich möchte unbedingt eine Authentifizierung, die ich in meiner Applikation gegen Einträge in meiner Datenbank gegenchecken will. An dem Applikationsserver kann ich nichts drehen.
2. Ich möchte nicht jeder Methode jedes mal 2 Parameter mehr (Benutzernamen/Passwort) mitgeben müssen
3. Ich möchte gerne möglichst viele eigene Boardmittel von Java (oder meiner IDE Netbeans) nutzen um nicht noch mehr Komplexität in meine eigentliche Applikation zu verlagern.

Was für Möglichkeiten gibt es? Gibt es irgend welche Möglichkeiten nutzung von Sessions?
Was gibt es noch für Möglichkeiten?

Würde mich über ein paar Insperationen sehr freuen.

Gruß
meinereiner
 
Ich empfehle (mal wieder) einen Blick auf Spring Security. Damit kannst du auf mehreren Leveln aktiv werden: auf URL Level, auf Methodenlevel und auf Methodenparameterlevel. Eine sehr gängige Variante ist HTTP-Basic/Digest gegen eine Datenbank. Dazu reicht es in einfachen Fällen anzugeben mit welchem SQL du einen User anhand seines Username auslesen kannst. Wenn das nicht passt implementiert man einen UserDetailsService und lädt dort einen zu authentifizierenden User programmatisch. In XML konfigurierst du dann nur noch welche URLs auf welche Rollen (nicht User!) beschränkt sein sollen. Wenn du dann die Rollen entsprechend auf die User verteilst war es das schon.

Wie gesagt, im Normalfall reicht ein XML mit der URL Konfiguration + eine Klasse die UserDetailsService implementiert (vorrausgesetzt dein Datenzugriffscode auf die User steht schon).

Grundsätzlich kann SS aber aus verschiedensten Credentials (Zertifikate, Username/Password, Tokens usw.) gegen sehr viele Backends (LDAP, Datenbanken) arbeiten. Mir ist beisher noch nichts untergekommen, was das Ding nicht erschlagen konnte.

Gruß
Ollie
 
Hallo,

Danke für deine Antwort (und sorry für meine verspätete Antwort).

Ich habe mir mal das Framework angeschaut. Wenn ich das richtig verstehe, müsste ich dann mein Projekt komplett auf das Spring Framework umheben. Zumindest habe ich nichts gefunden um meinen bestehenden JAX-WS eine Authentifizierungsmöglichkeit anzuhängen. Oder habe ich da was übersehen?

Gibt es noch eine andere (wenn möglich einfacherere) Möglichkeit?

Gruß
meinereiner
 
Ich kenn mich mit JAX-WS nicht detailliert aus, aber wenn du auf URL Basis Security willst, reicht ein Servlet Filter, der dann mit einer Springkonfiguration arbeitet. Der Rest der Anwendung muss also nicht auf Spring basieren.

Gruß
Ollie
 
Hallo,

ich habe mir das ganze mal angesehen, allerdings ist mir noch rellativ unklar, wie ich mit dem Filter (ausgelöst durch den Aufruf einer URL) den Request so bearbeiten kann, dass ich ihn an SOAP weitergeben kann. Bei dem Filter bekomme ich ein Request- und ein Response-Objekt.
Einfacher wäre dies hier bei einem Message-Handler im Webservice. Da kann ich einzelne Parameter prüfen und dann die Annahme der SOAP-Nachricht verweigern. Dies wäre aber im Endeffekt das Selbe, wie wenn ich meine USerdaten bei jedem Methodenaufruf mit übergebe ...

Leider konnte ich kein Beispiel finden, wie ich einen solchen Spring-Filter da hinein implementieren kann. Kennst du ein Beispiel?

Ich befürchte beinahe, dass ich nicht an einer normalen Basic-Authentifizierung auf Applikationsebene vorbeikomme.

Gruß
meinereiner
 
Request bearbeiten? An SOAP weitergeben? Du brauchst an dem Filter nichts rumzuimplementieren. Das einzige was du implementierst ist das Interface UserDetailsService. Den Rest *konfigurierst* du (den genauen Authentifizierungsmodus (Basic, Digest, Zertifikat o.ä.), welche URLs welche Rollen benötigen usw.).

Hier ist der grobe Überblick: http://static.springframework.org/spring-security/site/reference/html/ns-config.html#ns-web-xml
Hier die Referenz zur Konfiguration: http://static.springframework.org/spring-security/site/reference/html/appendix-namespace.html

Gruß
Ollie
 

Neue Beiträge

Zurück