我的HTTPS页面调用工作正常,我的HTTP Basic Auth工作正常,我不能做的是在HTTPS连接上运行Basic Auth。
我附上了一个代码示例,但它不起作用。我一直收到403.我已经检查了用户名和密码,并且在使用Firefox的RESTClinet插件进行测试时已经成功。
任何帮助都会很棒。感谢。
private static void getAPITest() throws MalformedURLException, IOException
{
try {
System.setProperty("javax.net.ssl.trustStore","/home/USER/CERTS/myTrustStore");
System.setProperty("javax.net.ssl.trustStorePassword", "PASSWORD");
Authenticator myAuth = new Authenticator()
{
@Override
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("USERNAME", "PASSWORD".toCharArray());
}
};
Authenticator.setDefault(myAuth);
String httpsURL = "https://someurlandapi.com";
URL myurl = new URL(httpsURL);
HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
//con.setRequestProperty("Authorization", "Basic " + authString);
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
con.setRequestProperty("Accept", "application/json");
con.setRequestMethod("POST");
InputStream ins = con.getInputStream();
InputStreamReader isr = new InputStreamReader(ins);
BufferedReader in = new BufferedReader(isr);
String inputLine;
while ((inputLine = in.readLine()) != null)
{
System.out.println(inputLine);
}
ins.close();
in.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:2)
事实证明在基本之前没有空格:
con.setRequestProperty("Authorization", "Basic " + authStringEnc);
它需要:
conn.setRequestProperty("User-Agent", "Mozilla/5");
如果您要创建自己的信任库,那么对于执行此操作的任何人来说,您都需要添加网站/网址SSL证书链。在Firefox中,您可以点击挂锁>更多信息>安全>查看证书。从那里,您可以突出显示带链的证书导出,然后使用keytool将其添加到您的信任库:
keytool -import -file websitecertificate.pem -alias websitecert -keystore myTrustStore
答案 1 :(得分:1)
我不认为PasswordAuthentication正在做你想要的。但基本的auth很容易处理。如果你在Java8中它只是Base64.getEncoder()。encodeToString((“USERNAME”+“:”+“PASSWORD”)。getBytes())。