データベースに保存されている「リフレッシュトークン」をもとに、新しい「アクセストークン」を取得したい。
ここに私が書いたコードがあります:
GoogleCredential.Builder credentialBuilder = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT).setJsonFactory(JSON_FACTORY)
.setClientSecrets(CLIENT_ID, CLIENT_SECRET);
credentialBuilder.addRefreshListener(new MyCredentialRefreshListener());
credential = credentialBuilder.build();
credential.setRefreshToken("saved_refresh_token_from_database");
try {
credential.refreshToken();
} catch (IOException e) {
e.printStackTrace();
}
class MyCredentialRefreshListener implements CredentialRefreshListener {
public void onTokenResponse(Credential cr, TokenResponse tr) {
System.out.println("Credential was refreshed successfully.");
}
public void onTokenErrorResponse(Credential cr, TokenErrorResponse tr) {
System.out.println(tr);
}
}
次のメッセージが表示されます。
com.google.api.client.auth.oauth2.TokenResponseException: 400 悪い
リクエスト { "エラー" : "invalid_grant" }
PHPスクリプトで同じCLIENT_ID、CLIENT_SECRET、および「リフレッシュトークン」を使用し、「アクセストークン」の有効期限が切れたときに「リフレッシュトークン」を使用して新しい「アクセストークン」を取得できました。
javadoc.google-oauth-java-client に基づいてコードを書きました。
コードを変更して新しいアクセストークンを取得する方法を知っている人はいますか?
前もって感謝します。
更新: 問題は、データベースに json_decode を実行せずに refresh_token を保存していて、JSON でエスケープ文字と見なされる "\" が含まれていたことです。