openid4java Ошибка узла YadisException не аутентифицирована
Я пишу код Java JSP, который аутентифицируется на сервере WSO2 IS с использованием openid. Я взял пример кода от разработчика, поэтому я получаю следующее:
<%
ConsumerManager manager = new ConsumerManager ();
String _returnURL = "https://192.168.15.48:9443/ficlient/secret.jsp";
List discoveries = manager.discover("https://myserverIP/openid");
DiscoveryInformation discovered = manager.associate(discoveries);
session.setAttribute("discovered", discovered);
AuthRequest authReq = manager.authenticate(discovered, _returnURL);
nextlink = authReq.getDestinationUrl(true);
%>
<a href="<%out.println(nextlink);%>">Secret data</a>
На 3-й строке (Список открытий...) я получаю исключение:
org.openid4java.discovery.yadis.YadisException: 0x704: I/O transport error: peer not authenticated
Я понял, что это связано с недействительным сертификатом ssl, выданным для связи https, и попытался включить следующее (как обнаружено в Интернете), чтобы избежать проверки:
<%
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType) {}
public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType) {}
}
};
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
} catch (Exception e) {}
%>
Но это все еще не работает. Что я пропустил?
1 ответ
Решение
Я наконец решил это, используя библиотеки Oltu для аутентификации.