2014-12-30 2 views
2

Есть ли способ запросить токен доступа через SSL с помощью Apache oltu? Он отлично работает, если я не использую HTTPS (порт 8443), но только с помощью HTTP ...Apache oltu oauth2 запросить токен через SSL

код у меня есть:

OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient()); 

OAuthClientRequest request = OAuthClientRequest.tokenLocation(MessageFormat.format("https://{0}:8443/applicationId/oauth/token", host)) // 
     .setGrantType(GrantType.PASSWORD) // 
     .setUsername("username") // 
     .setPassword("password") // 
     .setClientId("clientId") // 
     .buildBodyMessage(); 

OAuthAccessTokenResponse oAuthResponse = oAuthClient.accessToken(request); 

Я получаю следующее сообщение об исключении:

org.apache.oltu.oauth2.common.exception.OAuthSystemException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching localhost found 
at org.apache.oltu.oauth2.client.URLConnectionClient.execute(URLConnectionClient.java:108) 
at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:65) 
at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:55) 
at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:71) 

Я знаю, что существует такой способ исправить это, заменив HostnameVerifier HttpsURLConnection, но есть ли способ достичь этого в apache oltu ?:

static { 
    //for localhost testing only 
    javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
    new javax.net.ssl.HostnameVerifier(){ 

     public boolean verify(String hostname, 
       javax.net.ssl.SSLSession sslSession) { 
      if (hostname.equals("localhost")) { 
       return true; 
      } 
      return false; 
     } 
    }); 
} 

ответ

1

URLConnectionClient использует HttpsURLConnection, поэтому ваш код должен работать; ты пробовал?

+0

При установке DefaultHostnameVerifier у меня появилось следующее исключение: 'org.apache.oltu.oauth2.common.exception.OAuthSystemException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun .security.provider.certpath.SunCertPathBuilderException: невозможно найти допустимый путь сертификации для запрошенной цели \t at org.apache.oltu.oauth2.client.URLConnectionClient.execute (URLConnectionClient.java:108) '. Вот почему я думал, что это не работает ... –

+1

ОК, поэтому вы используете самоподписанный/ненадежный сертификат, а также тот, который не соответствует имени хоста; то вам нужно не только переопределить проверку имени хоста, но и доверительный менеджер, как описано в http://stackoverflow.com/questions/11857417/x509trustmanager-override-without-allowing-all-certs –

+0

Это решило мою проблему. Большое спасибо! –

Смежные вопросы