Сервлет не смог проверить полученный токен входа в Google - PullRequest
0 голосов
/ 07 января 2020

Я занимаюсь разработкой веб-приложения на основе Java и JSP. Я бы хотел, чтобы пользователи могли войти через Google Sign-In. Я копирую образец кода JSP, полученный из Inte rnet, чтобы открыть страницу входа в Google. После успешного входа пользователя код Javascript отправляет токен сервлету. Затем сервлет использует следующий код для проверки полученного токена:

public static GoogleIdToken.Payload getPayload (String tokenString) throws Exception {
     GoogleIdTokenVerifier verifier =
         new GoogleIdTokenVerifier.Builder(new NetHttpTransport(), new JacksonFactory())
     .setAudience(Collections.singletonList(GOOGLE_CLIENT_ID))
     .build();
     Payload payload = null;
     GoogleIdToken idToken = verifier.verify(tokenString);
     if (idToken != null) {
        payload = idToken.getPayload();
        String userId = payload.getSubject();
        System.out.println("User ID: " + userId);
        // Get profile information from payload
        String email = payload.getEmail();
        boolean emailVerified = Boolean.valueOf(payload.getEmailVerified());
        String name = (String) payload.get("name");
     } // of if (idToken != null)
     return payload;
  }

Однако код verifier.verify(...) всегда приводит к следующему исключению:

java. net .SocketTimeoutException: истекло время ожидания соединения java. net .DualStackPlainSocketImpl.waitForConnect (собственный метод) java. net .DualStackPlainSocketImpl.socketConnect (DualStackPlainSocketImpl. * * 10 * * 1038) .AbstractPlainSocketImpl.doConnect (AbstractPlainSocketImpl. java: 350) java. net .AbstractPlainSocketImpl.connectToAddress (AbstractPlainSocketImpl. java: 206) java. * 152 * .Amplain. : 188) java. net .PlainSocketImpl.connect (PlainSocketImpl. java: 172) java. net .SocksSocketImpl.connect (SocksSocketImpl. java: 392) java. net .Socket.connect (Socket. java: 589) sun.security.ssl.SSLSocketImpl.connect (SSLSocketImpl. java: 668) sun. net .NetworkClient.doConnect (NetworkClient. java: 175) sun . net. www.http.HttpClient.openServer (HttpClient. java: 432) солнце. net. www.http.HttpClient.openServer (HttpClient. java: 527) солнце. net. www.protocol.https.HttpsClient. (HttpsClient. java: 264) солнце. net. www.protocol.https.HttpsClient.New (HttpsClient. java: 367 ) солнце. net. www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient (AbstractDelegateHttpsURLConnection. java: 191) солнце. net. www.protocol.http.HttpURLConnection.plainConnect0 (HttpURLConnection. java: 1105) солнце. net. www.protocol.http.HttpURLConnection.plainConnect (HttpURLConnection. java: 999) солнце. net. www.protocol.https.AbstractDelegateHttpsURLConnection.connect (AbstractDelegateHttpsURLConnection. java: 177) солнце. net. www.protocol.https.HttpsURLConnectionImpl.connect (HttpsURLConnectionImpl. java: 153) com.google.api.client.http .jav anet .NetHttpRequest.execute (NetHttpRequest. java: 93) com.google.api.client.http.HttpRequest.execute (HttpRequest. java: 981) com.google.api.client.googleapis. auth.oauth2.GooglePublicKeysManager.refre sh (GooglePublicKeysManager. java: 172) com.google.api.client.googleapis.auth.oauth2.GooglePublicKeysManager.getPublicKeys (GooglePublicKeysManager. java. google. *1081*). .client.googleapis.auth.oauth2.GoogleIdTokenVerifier.verify (GoogleIdTokenVerifier. java: 174) com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier.verify (GoogleIdTokenVerifier. * 10 83 *: 192)

Я не мог понять, почему. Может кто-нибудь помочь!

Заранее спасибо!

1 Ответ

0 голосов
/ 10 января 2020

Я скопировал код подтверждения токена в консольную программу и запустил его на локальном компьютере. Код работает как положено. Таким образом, исключение тайм-аута соединения связано с проблемой сетевых настроек. Исходящее соединение с сервером Google фактически заблокировано!

...