I am writing a class for creating authorization to BigQuery and Google Cloud Storage.
In the past I have used CredentialStore
which has been deprecated. I am trying to use DataStoreFactory
but I discovered that it allows me to use only StoredCredential
while I need a Credential
.
I know one can convert from Credential
to StoredCredential
but I am not sure how to convert them in the opposite direction (StoredCredential
to Credential
). For example I am creating my connection like this:
Storage.Builder(HttpTransport transport,
JsonFactory jsonFactory,
HttpRequestInitializer httpRequestInitializer);
Could anyone point me in a direction about how to achieve this?
Thank you!
In most cases, wherever you use Credential
, you could use StoredCredential
. There is only one point you would work with Credential
, which is retrieving the Access Token during the OAuth callback. From there the Credential
can be converted to StoreCredential
and stored into the DataStore
. After that storage and retrieval all works with StoredCredential
.
But there are places were StoredCredential
can't be used. I just encountered one trying to create the Google Drive API Service wrapper.
There is a way to get around this with the GoogleCredential
object, it can be created from StoredCredential
as per this answer:
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;
}