I made with Apache's HttpClient. This is my solution and works perfectly for me.
First point to authorization url:
https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/userinfo.email&state=%2Fprofile&response_type=code&client_id=<YOUR_CLIENT_ID>&redirect_uri=<YOUR_CALLBACK_URL>
Then get parameters back from your redirect_uri and build request body for getting access_token:
String code = request.getParameter("code"); String foros = "code="+code + "&client_id=<YOUR_CLIENT_ID>" + "&client_secret=<YOUR_CLIENT_SECRET>" + "&redirect_uri="+getText("google.auth.redirect.uri") + "&grant_type=authorization_code";
Then with HttpClient make a POST and with simple JSON parser parse out the access token.
HttpClient client = new HttpClient(); String url = "https://accounts.google.com/o/oauth2/token"; PostMethod post = new PostMethod(url); post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); try { post.setRequestEntity(new StringRequestEntity(foros, null, null)); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } String accessToken = null; try { client.executeMethod(post); String resp = post.getResponseBodyAsString(); JSONParser jsonParser = new JSONParser(); Object obj = jsonParser.parse(resp); JSONObject parsed = (JSONObject)obj; accessToken = (String) parsed.get("access_token"); } catch (HttpException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } catch (ParseException e) { throw new RuntimeException(e); }
Now you have the access token and you can now access all of the Google API. For example, getting all the users info:
GetMethod getUserInfo = new GetMethod("https://www.googleapis.com/oauth2/v1/userinfo?access_token="+accessToken); String googleId = null; String email = null; String name = null; String firstName = null; String lastName = null; try { client.executeMethod(getUserInfo); String resp = getUserInfo.getResponseBodyAsString(); JSONParser jsonParser = new JSONParser(); Object obj = jsonParser.parse(resp); JSONObject parsed = (JSONObject)obj; googleId = (String) parsed.get("id"); email = (String) parsed.get("email"); name = (String) parsed.get("name"); firstName = (String) parsed.get("given_name"); lastName = (String) parsed.get("family_name"); } catch (IOException e) { throw new RuntimeException(e); } catch (ParseException e) { throw new RuntimeException(e); }
This data you can now save and use it for login to your application.