Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HOWTO create GoogleCredential by using Service Account JSON

Tags:

I am using the Java SDK for Android Publisher v2 and Oauth2 v2. Once I created the service account I was provided with a JSON of Google Play Android Developer service account with client id, email, private key etc. I have tried to look around and figure out how to create a Credential so that I use the AndoirdPublisher service to fetch info on my Android App's users subscriptions, entitlements etc and store this info on our backend servers.

I am getting hard time trying to figure out how to go about this. None of the documentations I have seen so far help in creating GoogleCredential using the downloaded JSON.

For example there is this documentation but it mentions only about P12 file and not the JSON. I want to avoid P12 if possible since I have multiple clients & I would like to save this JSON in some sort of database & then use it to create credential for each client.

Just to clarify I am trying to create the GoogleCredential object as described here,

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.services.sqladmin.SQLAdminScopes;  // ...  String emailAddress = "[email protected]"; JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); GoogleCredential credential = new GoogleCredential.Builder()     .setTransport(httpTransport)     .setJsonFactory(JSON_FACTORY)     .setServiceAccountId(emailAddress)     .setServiceAccountPrivateKeyFromP12File(new File("MyProject.p12"))     .setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))     .build(); 

But instead of setting the Service Account using P12 File like so setServiceAccountPrivateKeyFromP12File(), I want to use the JSON that carries the same info & generated when I created the service account.

like image 796
Chantz Avatar asked Aug 14 '15 22:08

Chantz


People also ask

How can I get GCP token from service account?

Log in to the Google Cloud CLI as the caller Google Account. Impersonate the privilege-bearing service account to generate the token. The gcloud auth print-access-token command generates an OAuth 2.0 access token for a service account.


1 Answers

I was able to solve this by digging in to the source code for GoogleCredential itself on github (which as of now resides here).

Turns out the version of google-api-java-client that was existing in my code was slightly dated. I upgraded it to the latest one 1.20.0 & I am able to now directly specify the JSON object created to create the GoogleCredential. I wish Google would have updated their documentation.

Here is the code snippet,

InputStream resourceAsStream = AuthTest.class.getClassLoader().getResourceAsStream("Google-Play-Android-Developer.json");  GoogleCredential credential = GoogleCredential.fromStream(resourceAsStream); 

That simple.

like image 130
Chantz Avatar answered Oct 21 '22 22:10

Chantz