Использование Google Direcory API с туннелем SSH

Ошибка:

com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request {"error": "invalid_scope", "error_description": "https://www.googleapis.com:22230/auth/admin.directory.user не является допустимой областью." }

У нас есть Java-приложение, развернутое в WAS, которое будет использовать Google Directory API. WAS размещается на уровне приложения, и ему не разрешен доступ к Google API в Интернете. Таким образом, сетевая группа открыла SSH-туннель, чтобы WAS мог получить доступ к Google API через другой порт (22230), отличный от порта ssl по умолчанию 443. Обновлен код Java, чтобы использовать значение области с новым портом, но в итоге получил " invalid_scope "ошибка, упомянутая выше.

SCOPES = Arrays.asList ("" https://www.googleapis.com:22230/auth/admin.directory.user "); credential = new GoogleCredential.Builder () .setTransport (httpTransport) .setJsonFactory (jsonFactory) .setServiceAccountUser (properties.getProperty (ACCT_USER)) .setServiceAccountId (properties.get ACCT_ID)) .setServiceAccountScopes (SCOPES) .setServiceAccountPrivateKeyFromP12File (p12) .build ();

Поиск в Google не помог мне найти много информации об использовании SSH-туннеля и Google API. Любая помощь будет принята с благодарностью. Есть ли рекомендуемый способ использования Google Directory API при выполнении SSH-туннелирования?


person Anoop Sadasivan    schedule 10.06.2016    source источник


Ответы (2)


Для использования нестандартных портов туннеля SSH для использования нестандартных портов туннеля SSH для Связь с клиентом GoogleAPI.

Для этого используйте следующий фрагмент кода:

GoogleCredential credential = (new com.google.api.client.googleapis.auth.oauth2.GoogleCredential.Builder ()). SetTransport (httpTransport) .setJsonFactory (jsonFactory). setTokenServerUrl (new GenericUrl ("https://accounts.google.com:ssh-port/o/oauth2/token" )) .setServiceAccountUser (ACCT_USER) .setServiceAccountId (ACCT_ID) .setServiceAccountScopes (SCOPES) .setServiceAccountPrivateKeyFromP12File (p12) .build ();

Служба каталогов = (новый com.google.api.services.admin.directory.Directory.Builder (httpTransport, jsonFactory, null)). SetHttpRequestInitializer (учетные данные). setRootUrl ("https://www.googleapis.com:22230/") .setApplicationName (APP_NAME) .build ();

Приведенный выше фрагмент кода должен перезаписывать значения URL-адресов службы по умолчанию, установленные клиентскими библиотеками Google API (файлы Jar).

person Sanjay Patra    schedule 16.06.2016

Насколько я знаю, области не изменяют место назначения для сетевых запросов, которые делает клиентская библиотека, они просто указывают Google, для каких областей вы пытаетесь авторизовать свою службу, поэтому размещение порта в URL-адресе области меняет его и он не сможет соответствовать известному списку. Поскольку вам придется изменить клиентскую библиотеку, чтобы изменить место назначения, я бы вместо этого выбрал перенаправление сетевых запросов среды выполнения в соответствии с вашими потребностями. Например, вы можете использовать хосты для перенаправления на loopback для заданных адресов, где у вас есть агент штопора, ожидающий запросов и SSH, туннелирующий их к вашей конечной точке. Поскольку вы показываете ответ 400 от Google, похоже, ваш трафик уже правильно маршрутизируется, и все, что вам нужно сделать, это удалить :22230 из URL-адреса области.

person Woodys Pawn Shop    schedule 15.06.2016
comment
Мы попытались удалить порт из URL-адреса управления и в итоге получили нераспознанную ошибку сообщения SSL: javax.net.ssl.SSLException: нераспознанное сообщение SSL, соединение с открытым текстом? на com.ibm.jsse2.ac (a.java:91) на com.ibm.jsse2.aa (a.java:213) на com.ibm.jsse2.qc.a (qc.java:320) на com. ibm.jsse2.qc.h (qc.java:428) на com.ibm.jsse2.qc.a (qc.java:813) на com.ibm.jsse2.qc.startHandshake (qc.java:636) на com .ibm.net.ssl.www2.protocol.https.c.afterConnect (c.java:22) на com.ibm.net.ssl.www2.protocol.https.d.connect (d.java:10) на com .ibm.net.ssl.www2.protocol.https.b.connect (b.java:55) - person Anoop Sadasivan; 16.06.2016
comment
См. Ответ @SanjayPatra, поскольку он упоминает об использовании методов, уже предоставленных в клиентских библиотеках, для изменения базовых URL-адресов. Похоже, Google предвидел это и предоставил вам выход в случае, когда что-то уже прослушивает стандартные порты интерфейса обратной связи (80/443) или вы не можете изменить среду. - person Woodys Pawn Shop; 15.08.2016