Automatisches HTTP Basic Auth

Alien

Mitglied
Hallo zusammen,

ich benötige mal wieder Hilfe...


Ich habe eine SSO-Infrastruktur und zwei Server. Das eine ist ein HTTPD (mit SSO-Modul), das andere ein Tomcat (ohne SSO-Modul).

Nun sollen meine User auf eine Applikation auf dem Tomcat zugreifen, sich dabei aber per SOO authentifizieren. Nachdem das wegen dem fehlenden SSO-Modul nicht möglich ist, muss ich ein Workaround schaffen, das aber nicht unbeding sehr sicher ist. Es sollte nur nicht allzuleicht auszuhebeln sein - also basic auth würde es tun.


Die Lösung die mir vorschwebt, sieht folgendermaßen aus:

- User greift auf PHP- oder Perl (CGI)-Skript auf HTTPD zu, authentifiziert sich dabei über SSO - so wie er das normalerweise auch macht.

- Das Skript leitet den User auf die Tomcat-Webapp (welche HTTP Basic AUTH mit einem generischen user implementiert hat) und übergibt dabei base64_encoded Username & Passwort an den Basic AUTH weiter, sodass der User das Authentifizierungsfenster gar nicht mitbekommt.

Hier ist der Coding-Ansatz (in PHP), welcher aber leider nicht funktioniert:

PHP:
<?php                                                                                                                                                        

$user = "theuser";
$pass = "secretpassword";                                                                                                                                      $host = "lntcv1";
$path_uri = "http://tomcatappserver:8080/thewebapp";
header("POST $path_uri HTTP/1.1\r\n");
header("Authorization: Basic user-pass=".base64_encode("$user:$pass")."\r\n");                                                                               header("Host: $host\r\n");
//header("Location: $path_uri");
                                                                                                                                         
?>

Ich hab's auch aus Verzweiflung mit "Location" im Anschluss an den restlichen header versucht - aber ohne Erfolg - daher auskommentiert.

Wäre auch für eien Lösung in Perl dankbar, wobei es aber glaub ich eher an meiner Unkenntniss von HTTP-Headern hakt...


Wenn es was einfacheres gibt: HER DAMIT! :) Bin für jeden Vorschlag sehr dankbar.
 
Hi.

Ja so kann das nicht klappen, wenn du diesen Authorization Header zum Client schickst. Nur weil du dem Client das schickst, und dann auf ne andere Seite leitest, nimmt der Client das ja nicht mit in den umgeleiteten Request mit.

Warum machst es nicht so:

* User loggt sich bei deinem SSO Script an.
* Script erstellt einen (verschlüsselten) Token
* Script hängt diesen Token sowie das Weiterleitungsziel an eine LoginUrl bei deiner Tomcat Anwendung an und leitet dorthin weiter.
* Dieses Loginscript beim Tomcat entschlüsselt den Token, überprüft ihn auf gültigkeit, loggt den User ein, und leitet abschließend ans eigentliche Ziel um.

HTTP Basic Auth kannst dafür dann zwar nicht benutzen.

lg,..
 
Die header()-Funktion ändert nur den HTTP-Header für die Antwort an den Client.
Für Anfragen an andere Server, bei denen du dann der Client wärst, ist die Funktion nicht zu gebrauchen. Da musst du selbst eine Verbindung zum Server herstellen (beispielsweise mittels cURL) und die Anfrage selber senden.
 
Kann er es nicht mit ".htaccess" machen?

Kommt auf die Seite, wird nach Login-Daten gefragt, weiterleitung an eine sichere Seite (welche natürlich guckt, ob man auch wirklich von der 1. (Prüfseite kam) und ob man es wirklich ist, dann einfach ein:

header("Location: $path_uri");

fertig?
Oder ist es quatsch?
 
Erst mal danke für die super Antworten!

@Alexander: Sehr gute Lösung, aber die wäre die wäre nur letzte Wahl, da ich an der Webapp nichts verändern sollte und mir das auch schwer fällt (ich bin ein PHP-guy und hab so meine Schwierigkeiten mit Java, JSF und vor allem Tomcat)

@Gumbo: Ah jetzt ja, eine Insel ^^. Curl wäre echt einen Versuch wert. Kann ich aber erst nach dem WE probieren :-(

@Steusi: Im prinzip cool, mit dem Haken:
Der User geht auf http://tomcatappserver:8080/thewebapp (also die URI der Java-Webapp, wird (wie auch immer man das beim Tomcat macht) auf den anderen Server umgeleitet und wird nach erfolgter Authentifizierung wieder auf die Ursprungsadresse zurückgeleitet. Wie soll ich da feststellen, dass der User authentifiziert wurde, wenn nicht wie von Alexander beschrieben, mit einem Token der im Java-Code geprüft wird?

Naja, ich werde mir das übers WE nochma durch den Kopf gehen lassen. Vieleicht fällt ja dem einen oder anderen noch eine Lösung ein.


VIELEN VIELEN DANK für die Vorschläge!
 
Zurück