Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Authenticate programmatically to Google with OAuth2

How can I authenticate programmatically to Google? Now that ClientLogin (https://developers.google.com/accounts/docs/AuthForInstalledApps) is deprecated, how can we perform a programmatic authentication to Google with OAuth2?

With ClientLogin we could perform a post to https://www.google.com/accounts/ClientLogin with email and password parameters and obtain the authentication token.

With OAuth2 i can't find a solution!

#

My app is a java background process. I saw, following this link: developers.google.com/accounts/docs/OAuth2InstalledApp#refresh, how to obtain a new access token using a refreshed token.

The problem is that I can't find a java example about how to instantiate an Analytics object (for example) to perform a query when I have a new valid access token

This is my code that returns a 401 Invalid credentials when invoke the "execute()":

public class Test {  static final String client_id = "MY_CLIENT_ID"; static final String client_secret = "MY_SECRET"; static final String appName = "MY_APP";  private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport(); private static final JsonFactory JSON_FACTORY = new JacksonFactory();  static String access_token = "xxxx"; static String refreshToken = "yyyyy";  public static void main (String args[]){      try {          GoogleCredential credential =              new GoogleCredential.Builder()                 .setTransport(HTTP_TRANSPORT)                 .setJsonFactory(JSON_FACTORY)                 .setClientSecrets(client_id, client_secret).build();         credential.setAccessToken(access_token);         credential.setRefreshToken(refreshToken);         //GoogleCredential         Analytics analytics = Analytics.builder(HTTP_TRANSPORT, JSON_FACTORY)             .setApplicationName(appName)             .setHttpRequestInitializer(credential)             .build();          Accounts accounts = analytics.management().accounts().list().execute();     } catch (Exception e) {         e.printStackTrace();     }  } 

What is the problem?

like image 429
Andrea Zonzin Avatar asked May 31 '12 14:05

Andrea Zonzin


People also ask

Can OAuth2 be used for authentication?

The OAuth 2.0 specification defines a delegation protocol that is useful for conveying authorization decisions across a network of web-enabled applications and APIs. OAuth is used in a wide variety of applications, including providing mechanisms for user authentication.


1 Answers

Check the OAuth 2 flow for Installed Application:

https://developers.google.com/accounts/docs/OAuth2InstalledApp

It still requires the user to authenticate with a browser the first time, but then you can store the refresh token and use it for subsequent requests.

For alternative solutions, check the Device flow or Service Accounts, they are explained in the same documentation set.

like image 79
Claudio Cherubino Avatar answered Sep 19 '22 19:09

Claudio Cherubino