HTTP Login mit CAS Authentisierung über SSL

Saiga

Neues Mitglied
Ich hoffe jemand kann mir bei folgendem Problem helfen:

Ich muss ein Programm schreiben, das sich mit vorgegebenen Logindaten auf einer Webseite einloggt um von dort Daten auszulesen. Das Problem ist das der Login über eine SSL Verbindung und einen CAS Server läuft.

Ich hab schon den Loginvorgang per Live HTTP Headers plugin protokolliert und versucht die entsprechenden Verbindungen nachzubilden(da ein normales übergeben der Logindaten per POST Methode auch nicht funktioniert hat), aber ich werde immer wieder zur Loginseite zurück geschickt.

Wäre schön wenn jemand evtl. ein paar allgemeine Sachen weiß die man bei CAS/SSL beachten müsste.
Ansonsten werd ich morgen noch den schon vorhandenen CODE einfügen.

Hier mal ein ausschnitt des Codes den ich bis jetzt hab

Java:
			URL url = new URL("https://cas01.wmgruppe.de/cas/login?service=http%3A%2F%2Fwww.wmdaten.de%2Fcustomer%2Fevt_pro2_cas.php%3Fpage_number%3D0");
			HttpsURLConnection loginverbindung = (HttpsURLConnection) url.openConnection();
			loginverbindung.setDoInput(true);
			
			BufferedReader einlesen = new BufferedReader(new InputStreamReader(loginverbindung.getInputStream()));
		    
		    while((line=einlesen.readLine()) != null){	  			// Hier lese ich nen Random generierten Code ein für den kommenden POST Header
		    	Matcher vergleich = musterlt.matcher(line);
		    	if (vergleich.find()){
		    		lt = line.substring(vergleich.start(), vergleich.end());
		    		break;
		    	}
		    }
		    String headerName;
			
			for (int z=1; (headerName = loginverbindung.getHeaderFieldKey(z))!=null; z++) {			//Hier lese ich die zu setzenden Cookies aus
			 	if (headerName.equals("Set-Cookie")) {                  
			 	cookie += loginverbindung.getHeaderField(z); 
			 	}			 	
			}
		    einlesen.close();
		    
		    StringTokenizer st = new StringTokenizer(cookie,"=; ");
			String[] Tokens = new String[st.countTokens()];
			int c=0;
			while (st.hasMoreTokens())
			{
				Tokens[c] = st.nextToken();
				c++;
			};
		    
		    String loginwert="username=" + logindaten.getProperty("login") + "&password=" + logindaten.getProperty("pw") + "&lt="+ lt +"&_eventId=submit&submit=Login";			//Das soll beim POST aufruf übergeben werden
			Integer length = new Integer(loginwert.length());
			
			verbindung = (HttpsURLConnection) new URL("https://cas01.wmgruppe.de/cas/login;jsessionid="+Tokens[1]+"?service=http%3A%2F%2Fwww.wmdaten.de%2Fcustomer%2Fevt_pro2_cas.php%3Fpage_number%3D0").openConnection();
			verbindung.setRequestProperty("Content-Length", length.toString());
			verbindung.setRequestMethod("POST");
			verbindung.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7");
			verbindung.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
			verbindung.setRequestProperty("Cookie",Tokens[0]+"="+Tokens[1]);
			verbindung.setRequestProperty("Referer",loginverbindung.getURL().toString());
			verbindung.setDoOutput(true);
			
			PrintWriter out = new PrintWriter(verbindung.getOutputStream());
	        out.println(loginwert);
			out.close();

Danach versuch ich die automatische Weiterleitung die im Browser passiert nach zu bilden

Java:
			verbindung = (HttpURLConnection) new URL(verbindung.getHeaderField("Location")).openConnection();
			verbindung.setRequestMethod("GET");
			verbindung.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7");
			verbindung.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
			st = new StringTokenizer(verbindung.getHeaderField("Set-Cookie"),"; ");
			Tokens = new String[st.countTokens()];
			c=0;
			
			while (st.hasMoreTokens())
			{
				Tokens[c] = st.nextToken();
				c++;
			};
			cookie=Tokens[0];

			verbindung = (HttpURLConnection) new URL("http://www.wmdaten.de/customer/evt_pro2_cas.php?&page_number=" + i).openConnection();
			verbindung.setRequestMethod("GET");
			verbindung.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7");
			verbindung.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
			verbindung.setRequestProperty("Cookie", cookie);

und trotz alledem lande ich anschließend auf ner Fehlerseite die mir sagt das ich ne CAS Authentisierung brauch.

Ich hab mal die ausgelesenen Header vom Loginvorgang angehängt(Username und PW hab ich unkenntlich gemacht)
 

Anhänge

Zuletzt bearbeitet:
Ich weiß nicht wie gut du dich denn überhaupt mit CAS auskennst, oder mit SSL bzw. mit der Java (Web-)programmierung.

Aber eine Frage stellt sich mir:
Welches Problem ließ sich dort nicht lösen: CAS | Jasig Community ? Umfangreiche Doku, Mailingliste, FAQs, Community, ...
 
Das ist mein erstes größeres JAVA-Projekt und mit SSL und CAS hab ich vorher auch keine Erfahrung gesammelt(was wahrscheinlich mein Problem mit der Aufgabe erklärt). Ich hab mir auf der CAS-Seite der Yale-Uni die Funktionsweise einer CAS Authentisierung angeschaut und ich glaub das hab ich einigermaßen begriffen, was SSL angeht dachte ich eigendlich das es reicht wenn die Verbindung eine HttpsURLConnection ist.
 

Neue Themen


Zurück
Oben