简体   繁体   中英

How to get user profile on Google API using the JAVA library?

I have a Java ClientRequest to the Google API that returns a json containing the profile based in 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": "myemail@gmail.com",
    "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'd like to use the java library to avoid mount the http request, keep the google server url and another minor things.
2 I don't need the authorization's 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 don't go there. So far only found examples using the Plus library.

In summary I need something in the google api java library exactly equivalent to the http request used nowadays.

Thank you very much in advance!

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();

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM