2012-05-10 12 views
14

bekam ich die Aktualisierungs-Token und Zugriffstoken aus dem Berechtigungscode durch das Beispielprogramm unter Verwendung von hier gegebenen https://developers.google.com/drive/credentials#retrieve_oauth_20_credentialsFetching Zugriffstoken von Aktualisierungs-Token mit Hilfe von Java

Aber es gibt kein Beispielprogramm das Zugriffstoken von Aktualisierungs-Token zu erhalten, dh , wenn wir keinen Autorisierungscode haben. Irgendwelche Zeiger? Gibt es eine Möglichkeit zum Instanziieren eines Laufwerksdienstobjekts, das nur das Aktualisierungstoken und das Zugriffstoken verwendet?

Antwort

21

Die DrEdit Java Probe hat ein Beispiel dafür, wie gespeicherte Anmeldeinformationen aus dem Google App Engine-Datenspeicher abgerufen werden.

GoogleCredential credentials = new GoogleCredential.Builder() 
    .setClientSecrets(CLIENT_ID, CLIENT_SECRET) 
    .setJsonFactory(jsonFactory).setTransport(transport).build() 
    .setRefreshToken("<REFRESH_TOKEN>").setAccessToken("<ACCESS_TOKEN>"); 

EDIT:: Berichtigt einen Tippfehler in dem Code mit gespeicherten Token

Wenn eine andere Art von Anmeldeinformationen speichern, können Sie den folgenden Code verwenden, um neue OAuth 2.0 Credentials instanziiert.

+0

Dank Aljan, das hat mir sehr geholfen .. :) – VijayRaj

+0

Das macht mich ein invalid_grant Antwort erhalten ... irgendwelche Ideen? Vielen Dank. – anavarroma

+0

Wenn Sie das Token nicht aktualisieren können, bedeutet dies normalerweise, dass der Benutzer den Zugriff widerrufen hat und die nachfolgende Aktualisierung fehlschlägt. – Alain

1

Nur um meine Erfahrung zu erklären.

Haben die gleiche Problem (Zugriffstoken auf null) das Problem war, dass ich ohne Absenden setAccessType getestet worden war („offline“) und von dem Konto Zugriff wurde der Zugriff erlaubt.

Dann legte ich auf meinen Code setAccessType ("offline") Code, sondern aktualisieren noch Token auf null.

Meine Lösung war, die Erlaubnis vom Konto zu widerrufen, ich zugreifen möchten (https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en). Im nächsten Test gewähre ich es.

2

Versuchen Sie diesen Code. Dies ist eine Mischlösung von Alain + . Das hat für mich funktioniert.

GoogleCredential credential = createCredentialWithRefreshToken(
     HTTP_TRANSPORT, JSON_FACTORY, new TokenResponse().setRefreshToken(refreshToken)); 

credential.refreshToken(); 

String newAccessToken = credential.getAccessToken(); 

public static GoogleCredential createCredentialWithRefreshToken(HttpTransport transport, 
     JsonFactory jsonFactory, TokenResponse tokenResponse) { 
    return new GoogleCredential.Builder().setTransport(transport) 
     .setJsonFactory(jsonFactory) 
     .setClientSecrets(CLIENT_ID, CLIENT_SECRET) 
     .build() 
     .setFromTokenResponse(tokenResponse); 
} 
+0

Ich habe gerade meinen früheren Code bearbeitet, da ich irrtümlicherweise den Zugriff auf das Zugriffstoken anstelle des Aktualisierungstokens angegeben habe. –

0

diesem Beispiel folgen:

private static void getAccessTokenFromRefreshToken() throws IOException { 
    GoogleCredential credentials = new GoogleCredential.Builder() 
     .setClientSecrets(CLIENT_ID, CLIENT_SECRET) 
     .setJsonFactory(JSON_FACTORY).setTransport(httpTransport).build() 
     .setRefreshToken(REFRESH_TOKEN); 

    String accessToken = credentials.getAccessToken(); 
    System.out.println("Access token before: " + accessToken); 

    credentials.refreshToken(); 

    accessToken = credentials.getAccessToken(); 
    System.out.println("Access token after: " + accessToken); 
} 

Ausgang:

Access token before: null 
Access token after: ya29.u4HC22-Avc0aaDC0g0zj1jhz2yjsJrm8qm0hU2eVeBrf6DKj3CcHDQ42KARH4y_d364-b 
+0

Ich habe keine Sache wie CLIENT_SECRET bekommen. Wo finde ich es? Ich habe nur CLIENT_ID – Jana