我正在编写一个类来创建对 BigQuery 和 Google Cloud Storage 的授权。
过去我使用过已被弃用的 CredentialStore
。我正在尝试使用 DataStoreFactory
但我发现它允许我在需要 StoredCredential
时只使用 Credential
。
我知道可以从 Credential
转换为 StoredCredential
但我不确定如何将它们转换为相反的方向( StoredCredential
到 Credential
)。例如,我正在创建这样的连接:
Storage.Builder(HttpTransport transport,
JsonFactory jsonFactory,
HttpRequestInitializer httpRequestInitializer);
谁能指出我如何实现这一目标的方向?
谢谢!
最佳答案
在大多数情况下,无论您在哪里使用 Credential
,都可以使用 StoredCredential
。只有一点可以使用 Credential
,即在 OAuth 回调期间检索访问 token 。从那里 Credential
可以转换为 StoreCredential
并存储到 DataStore
中。之后,存储和检索都适用于 StoredCredential
。
但是有些地方不能使用 StoredCredential
。我刚刚遇到了一个试图创建 Google Drive API 服务包装器的问题。
有一种方法可以使用 GoogleCredential
对象解决此问题,它可以根据以下答案从 StoredCredential
创建:
Stored Credential from Google API to be reused using Java
import com.google.api.client.auth.oauth2.StoredCredential;
public static GoogleCredential createGoogleCredential(StoredCredential storedCredential) {
GoogleCredential googleCredential = new GoogleCredential.Builder()
.setTransport(new NetHttpTransport())
.setJsonFactory(new JacksonFactory())
.setClientSecrets("client_id", "client_secret")
.setAccessToken(storedCredential.getAccessToken())
.build();
return googleCredential;
}