/** * Refresh existing access token. Parameter must have attached refreshToken. New refreshed accessToken will be updated to this * instance of accessTokenContext * * @param accessTokenContext with refreshToken attached */ public void refreshToken(GoogleAccessTokenContext accessTokenContext) { GoogleTokenResponse tokenData = accessTokenContext.getTokenData(); if (tokenData.getRefreshToken() == null) { throw new SocialException(SocialExceptionCode.GOOGLE_ERROR, "Given GoogleTokenResponse does not contain refreshToken"); } try { GoogleRefreshTokenRequest refreshTokenRequest = new GoogleRefreshTokenRequest(TRANSPORT, JSON_FACTORY, tokenData.getRefreshToken(), this.clientID, this.clientSecret); GoogleTokenResponse refreshed = refreshTokenRequest.execute(); // Update only 'accessToken' with new value tokenData.setAccessToken(refreshed.getAccessToken()); if (log.isTraceEnabled()) { log.trace("AccessToken refreshed successfully with value " + refreshed.getAccessToken()); } } catch (IOException ioe) { throw new SocialException(SocialExceptionCode.GOOGLE_ERROR, ioe.getMessage(), ioe); } }
GoogleTokenResponse response = new GoogleAuthorizationCodeTokenRequest(new NetHttpTransport(), new JacksonFactory(), "812741506391.apps.googleusercontent.com", "{client_secret}", "4/P7q7W91a-oMsCeLvIaQm6bTrgtp7", "https://oauth2-login-demo.appspot.com/code") .execute(); System.out.println("Access token: " + response.getAccessToken()); System.out.println("Id token: " + response.getIdToken());
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest; import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken; import com.google.api.client.googleapis.auth.oauth2.GoogleTokenResponse; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.jackson.JacksonFactory; private final val TRANSPORT: HttpTransport = new NetHttpTransport() private final val JSON_FACTORY: JacksonFactory = new JacksonFactory() GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(TRANSPORT, JSON_FACTORY, CLIENT_ID, CLIENT_SECRET, code, "postmessage").execute(); GoogleIdToken idToken = tokenResponse.parseIdToken(); String gplusId = idToken.getPayload().getSubject();
/** * {@link Beta} <br/> * Parses using {@link GoogleIdToken#parse(JsonFactory, String)} based on the {@link #getFactory() * JSON factory} and {@link #getIdToken() ID token}. */ @Beta public GoogleIdToken parseIdToken() throws IOException { return GoogleIdToken.parse(getFactory(), getIdToken()); }
httpTransport, jsonFactory, "https://www.googleapis.com/oauth2/v3/token", clientId, clientSecret, authCode.getAuthCode(), redirectURIs).execute(); resJson.append(DBConstants.GSpread.ACCESS_TOKEN, googleTokenResponse.getAccessToken()); resJson.append(DBConstants.GSpread.REFRESH_TOKEN, googleTokenResponse.getRefreshToken()); responseMsg = resJson.toString(); responseStatus = HttpStatus.SC_OK;
@Override protected Void invokeRequest(GoogleAccessTokenContext accessTokenContext) throws IOException { GoogleTokenResponse tokenData = accessTokenContext.getTokenData(); TRANSPORT.createRequestFactory() .buildGetRequest(new GenericUrl("https://accounts.google.com/o/oauth2/revoke?token=" + tokenData.getAccessToken())).execute(); if (log.isTraceEnabled()) { log.trace("Revoked token " + tokenData); } return null; }
public T executeRequest(GoogleAccessTokenContext accessTokenContext, GoogleProcessor googleProcessor) { GoogleTokenResponse tokenData = accessTokenContext.getTokenData(); try { return invokeRequest(accessTokenContext); } catch (IOException ioe) { if (ioe instanceof HttpResponseException) { HttpResponseException googleException = (HttpResponseException)ioe; if (googleException.getStatusCode() == 400 && tokenData.getRefreshToken() != null) { try { // Refresh token and retry revocation with refreshed token googleProcessor.refreshToken(accessTokenContext); return invokeRequest(accessTokenContext); } catch (SocialException refreshException) { // Log this one with trace level. We will rethrow original exception if (log.isTraceEnabled()) { log.trace("Refreshing token failed", refreshException); } } catch (IOException ioe2) { ioe = ioe2; } } } log.warn("Error when calling Google operation. Details: " + ioe.getMessage()); throw createException(ioe); } } }
@Override public int hashCode() { return scopes.hashCode() * 13 + tokenData.hashCode(); } }
@Override public boolean equals(Object that) { if (that == this) { return true; } if (that == null) { return false; } if (!(that.getClass().equals(this.getClass()))) { return false; } GoogleAccessTokenContext thatt = (GoogleAccessTokenContext)that; return this.scopes.equals(thatt.scopes) && this.tokenData.equals(thatt.tokenData); }
/** * Retrieve OAuth 2.0 credentials. * * @return OAuth 2.0 Credential instance. * @throws IOException */ private Credential getCredentials() throws IOException { String code = tokenField.getText(); HttpTransport transport = new NetHttpTransport(); JacksonFactory jsonFactory = new JacksonFactory(); String CLIENT_SECRET = "EPME5fbwiNLCcMsnj3jVoXeY"; // Step 2: Exchange --> GoogleTokenResponse response = new GoogleAuthorizationCodeTokenRequest( transport, jsonFactory, CLIENT_ID, CLIENT_SECRET, code, REDIRECT_URI).execute(); // End of Step 2 <-- // Build a new GoogleCredential instance and return it. return new GoogleCredential.Builder() .setClientSecrets(CLIENT_ID, CLIENT_SECRET) .setJsonFactory(jsonFactory).setTransport(transport).build() .setAccessToken(response.getAccessToken()) .setRefreshToken(response.getRefreshToken()); }
String userId = ((GoogleTokenResponse) tokenResponse).parseIdToken().getPayload().getUserId();
GoogleIdToken googleIdToken = response.parseIdToken();