Reputation: 139
I have a Java ClientRequest to the Google API that returns a JSON containing the profile based on an access_token. The URL is:
https://www.googleapis.com/oauth2/v1/userinfo?access_token=ya29.1.AADtN_VALuuUTBm8ENfNTz8s...
And the response is:
{ "id": "111223344556677889900", "email": "[email protected]", "verified_email": true, "name": "My Name", "given_name": "My", "family_name": "Name", "link": "plus.google.com/111223344556677889900", "picture": "photo.jpg", "gender": "male", "locale": "en" }
Some points:
1 I want to use the Java library to avoid mounting the HTTP request, keep the google server URL, and other minor things.
2 I don't need the authorization steps because, at this point, my method receives the access token (all the Oauth steps are done before).
3 In this method, we don't have (and so far don't need) the client id and secret.
4 I don't need the Google+ scope. Actually, I prefer not to go there. So far only found examples using the Plus library.
In summary, I need something in the google API Java library precisely equivalent to the HTTP request I use nowadays.
Thank you very much in advance!
Upvotes: 5
Views: 11842
Reputation: 113
Complementing with more info, since I don't have enough reputation to comment on the above answer:
After adding
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-oauth2</artifactId>
<version>v2-rev65-1.17.0-rc</version>
</dependency>
to your pom.xml
file, the following line
Oauth2 oauth2 = new Oauth2.Builder(new NetHttpTransport(), new JacksonFactory(), credential).setApplicationName("Oauth2").build();
could raise "JacksonFactory cannot be resolved to a type", and if this happens, you can replace it with new GsonFactory()
(from com.google.api.client.json.gson), and it'll work.
Now, about how to get an accessToken
: it comes inside com.google.auth.oauth2.UserCredentials
(com.google.auth.oauth2.UserCredentials), which you can get by calling com.google.auth.oauth2.UserAuthorizer.getCredentialsFromCode
.
You can build a UserAuthorizer
by calling
UserAuthorizer
.newBuilder()
.setClientId(ClientId.of(<client id>, <client secret>))
.setScopes(<scopes>)
.build()
You can get the <client id>
and the <client secret>
by reading the OAuth Client ID file created on your google cloud project dashboard under credentials.
And lastly, an example of how to read the file using com.google.auth.oauth2.ClientId
:
ClientId parsedClient = ClientId.fromStream(new FileInputStream("key.json"))
I'm a bit late here, but I hope this helps someone.
Upvotes: 2
Reputation: 413
I hope this helps
GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken);
Oauth2 oauth2 = new Oauth2.Builder(new NetHttpTransport(), new JacksonFactory(), credential).setApplicationName(
"Oauth2").build();
Userinfoplus userinfo = oauth2.userinfo().get().execute();
userinfo.toPrettyString();
Upvotes: 29