14

https://developers.google.com/drive/credentials#retrieve_oauth_20_credentialsにあるサンプルプログラムを使用して、認証コードから更新トークンとアクセストークンを取得しました

ただし、更新トークンからアクセストークンを取得するためのサンプルプログラムはありません。つまり、認証コードがない場合です。ポインタはありますか?更新トークンとアクセストークンのみを使用してドライブサービスオブジェクトをインスタンス化する方法はありますか?

4

4 に答える 4

22

DrEdit Javaサンプルには、GoogleAppEngineデータストアから保存されたクレデンシャルを取得する方法の例があります。

別の種類のクレデンシャルストアを使用している場合は、次のコードを使用して、保存されているトークンを使用して新しいOAuth2.0クレデンシャルをインスタンス化できます。

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

編集:コードのタイプミスを修正しました。

于 2012-05-10T16:01:15.317 に答える
3

このコードを試してください。これは、Alain+ https://cloud.google.com/bigquery/authorizationのミックスソリューションです。これは私のために働いた。

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);
}
于 2014-11-23T12:48:35.807 に答える
1

私の経験を説明するためだけに。

同じ問題(アクセストークンからnull)があった場合、問題は、setAccessType( "offline")を送信せずにテストされ、アカウントからのアクセスが許可されたことでした。

次に、コードsetAccessType( "offline")コードを追加しましたが、トークンをnullに更新しました。

私の解決策は、アクセスしたいアカウント(https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en)から権限を取り消すことでした。次のテストで私はそれを許可します。

于 2014-03-08T13:06:39.360 に答える
0

この例に従ってください:

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

出力:

Access token before: null
Access token after: ya29.u4HC22-Avc0aaDC0g0zj1jhz2yjsJrm8qm0hU2eVeBrf6DKj3CcHDQ42KARH4y_d364-b
于 2015-07-25T21:52:42.490 に答える