我正在编写一个类来创建对 BigQuery 和 Google Cloud Storage 的授权。

过去我使用过已被弃用的 CredentialStore。我正在尝试使用 DataStoreFactory 但我发现它允许我在需要 StoredCredential 时只使用 Credential

我知道可以从 Credential 转换为 StoredCredential 但我不确定如何将它们转换为相反的方向( StoredCredentialCredential )。例如,我正在创建这样的连接:

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;
}

10-07 15:14