首页 文章

使用带有SSH隧道的Google Direcory API

提问于
浏览
0

Error:

com.google.api.client.auth.oauth2.TokenResponseException:400错误请求{"error":"invalid_scope",_ "error_description":“_ https://www.googleapis.com:22230/auth/admin.directory.user无效范围 . ” }

我们在WAS中部署了一个Java应用程序,它将使用Google Directory API . WAS位于应用层,不允许在互联网上访问Google API . 因此,网络团队打开了一个SSH隧道,以便WAS可以通过不同的端口(22230)访问Google API而不是默认的ssl端口443.更新了Java代码以使用新端口的范围值,但最终得到了“ invalid_scope“上面提到的错误 .

SCOPES = Arrays.asList(“”https://www.googleapis.com:22230/auth/admin.directory.user“);凭证=新的GoogleCredential.Builder() . setTransport(httpTransport).setJsonFactory(jsonFactory).setServiceAccountUser(properties.getProperty(ACCT_USER)) . setServiceAccountId(properties.getProperty(ACCT_ID)) .setServiceAccountScopes(SCOPES).setServiceAccountPrivateKeyFromP12File(p12).build();

谷歌搜索没有帮助我找到有关SSH隧道和谷歌API使用的很多信息 . 任何帮助将不胜感激 . 当SSH隧道完成时,是否有推荐的方法来使用Google Directory API?

2 回答

  • 0

    您需要覆盖Directory对象中的“ tokenServerEncodedUrl " parameter value in the GoogleCredential object, and " rootUrl ”参数值,以便使用非标准SSH隧道端口进行GoogleAPI客户端通信 .

    使用以下代码段来实现它:

    GoogleCredential凭证=(新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(credential) . setRootUrl("https://www.googleapis.com:22230/") .setApplicationName(APP_NAME).build();

    上面的代码段将覆盖由Google API客户端库(Jar文件)设置的默认服务URL值 .

  • 2

    据我所知,范围不得不改变客户端库以更改目标,我会选择执行环境重定向网络请求以满足您的需求 . 例如,您可以使用主机重定向到给定地址的环回,其中您有一个等待请求的软件代理和SSH将它们隧道传送到您的 endpoints . 由于您显示了来自Google的400响应,因此您的流量似乎已正确路由,您应该做的就是从范围网址中删除 :22230 .

相关问题