再会,
我最近正在通过 java api 为 bigquery 测试 Oauth2.0 安装的应用程序身份验证。我使用 这个命令行示例 作为源,因为我想让用户更容易获得访问权限(要求他们复制代码会很丑)
如果我在 GoogleAuthorizationCodeflow 中使用 SetAccessType(Offline),它会说,它会自动为我刷新访问令牌。
相关我想问一下,如果我使用 com.google.api.services.bigquery.Bigquery.Builder.Builder(HttpTransport transport, JsonFactory jsonFactory, HttpRequestInitializer httpRequestInitializer 授权 com.google.api.services.bigquery.Bigquery 实例) 使用具有刷新令牌的凭据,我是否必须重新授权它,否则它会更新自身内部的凭据?
如果它在一小时(令牌到期时间)后没有给我与 bigquery 的有效连接,那么重新授权客户端的最佳方法是什么?
我应该使用 credentials.RefreshToken() 然后用新的访问令牌构建另一个 bigquery 实例,还是有更好的方法?
(我可能还想更改凭据 Refreshlistener,但问题是,如果我用 GoogleAuthorizationCodeflow.createAndStoreCredential(response, Clientid) 实例化凭据,之后我将无法获取 Refreshlistener。我怎样才能得到它,所以我可以使用该类自动重新授权我的 Bigquery 客户端 <也许这是更好的方法是吗?)
代码流在哪里存储刷新的访问令牌(如果它自动刷新)?如果我这样声明:
new GoogleAuthorizationCodeFlow.Builder(
transport, jsonFactory, clientSecrets, scopes).setAccessType("offline")
.setApprovalPrompt("auto").setCredentialStore(new MemoryCredentialStore()).build();
它会始终将我刷新的访问令牌存储在 MemoryCredentialStore 中吗?因此,如果我使用 .getCredentialStore().load(userId, credential) 它将从内存存储中加载刷新的访问令牌?
有没有办法增加或减少访问令牌有效的时间?因为出于测试目的,我真的很想这样做。
ps:我也在研究 google-api-java-client 和 google-oauth-java-client 的源代码,但我仍然找不到解决方案。
最重要的是,我正在研究:代码中的类凭据:public void intercept(HttpRequest request) throws IOException { lock.lock();... 但实际上我无法弄清楚何时调用此方法,最终我迷失了问题。
期待你的回答:阿提拉