Java og Windows - Problem med auth over HTTPS

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger standard API i Eclipse til at oprette forbindelse til en server over HTTPS. Jeg har kæden certs installeret i min keystore. Windows kan dog ikke lide det og kaster op en certificate chaining error. På Ubuntu fungerer det faktisk fint!


Nu, på Windows har jeg en 'hack', som jeg så på her, der grundlæggende skaber en TrustManager som gør det muligt for alle certs. For øjeblikket er det fint. Jeg er nødt til at komme tilbage til det senere, men mit nuværende problem er, at min kode forbinder til serveren, bekræfter ved hjælp af uc.setRequestProperty("Authorization", "Basic " + encodedLogin);, men vender tilbage HTML-koden til min formular, som jeg faktisk troede jeg logger ind på i første omgang. Uden den linje får jeg en 403.


Da jeg gik til webstedet i browseren, dukkede en login boks op. Da jeg loggede ind, loggede den mig uden problemer. Da jeg klikede på Cancel og afskedede login-feltet, tog det mig til den nøjagtige HTML-formular, at min kode vender tilbage. Så jeg skal enten på en eller anden måde logge ind på denne popup-boks, eller jeg skal godkende en anden gang for at logge ind på webformularen. Jeg håber det er en klar nok forklaring.


Mit ultimative mål er naturligvis at logge ind og returnere et auth-objekt tilbage til min kode for at gøre yderligere kommunikation med webstedet. Jeg er bare fast på denne lille niggly del i dage! Enhver hjælp er meget værdsat !!


Jeg har vedhæftet min kode, plus koden til HTML-formularen.


Tak.


Min kode:


try
{
    String login = "MyUser:MyPass";
    byte[] encodedLogin = new Base64().encode(login.getBytes());

    StringBuilder parsedContentFromUrl = new StringBuilder();
    HttpsURLConnection uc = (HttpsURLConnection) webURL.openConnection();

    //uc.setRequestProperty("Proxy-Authorization", "Basic " + encodedLogin);
    uc.setRequestProperty("Authorization", "Basic " + encodedLogin);
    //uc.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
    uc.connect();

    //uc.getInputStream();

    BufferedInputStream in = new BufferedInputStream(uc.getInputStream());
    //System.out.println(uc.getRequestProperty("WWW-Authenticate"));

    int ch;
    while ((ch = in.read()) != -1) {
       parsedContentFromUrl.append((char) ch);
    }
    System.out.println(parsedContentFromUrl);
}
catch (IOException e)
{
    System.out.println("IOException::"+e.getMessage());
    e.printStackTrace();
}


HTML-webformular


<FORM METHOD=POST ACTION="/mylogin.form">
<FONT SIZE="+2">
<TABLE BORDER="0" WIDTH="400">
<TR>
<TD ALIGN="LEFT"><UL><LI>Username</LI></UL></TD>
<TD><INPUT NAME="username" SIZE="15"></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><UL><LI>Password</LI></UL></TD>
<TD><INPUT TYPE="PASSWORD" NAME="password" SIZE="15"></TD>
</TR>
</TABLE>
</FONT>

<INPUT TYPE="HIDDEN" NAME="login-form-type" VALUE="pwd">

<BR><INPUT TYPE="SUBMIT" VALUE="Login">
</FORM>

Bedste reference


HTTP-autorisation er ikke den samme som at logge ind på en webformular.


Du har HTTP-autorisation til at arbejde (dvs. fikseret 403-fejlen), så du får den side du anmodede om, hvilket er en login-side. HTML'en viser, at du for at logge ind på formularen skal udføre en POST på/mylogin.form URL. I øjeblikket laver du en GET på webadressen for login-siden.


Det er usædvanligt, at en server har to forskellige godkendelsesprocesser parallelt. Serveren kan være fejlkonfigureret.