【发布时间】:2015-02-18 23:05:16
【问题描述】:
我正在尝试使用从 OAuth Playground 发出的刷新令牌访问 GoogleDrive API(我自己的空调),如下所示。我正在使用我的刷新令牌和访问令牌进行离线访问,但我得到了未经授权的 401。我的代码是基于参考 belwoand google-api javadocs 推荐的构建离线请求
我不想使用浏览器,我希望从服务器端应用程序运行它以上传到我自己的空调。
ref: http://stackoverflow.com/questions/10533203/fetching-access-token-from-refresh-token-using-java
代码:
public static void main(String[] args) throws IOException {
HttpTransport TRANSPORT = new NetHttpTransport();
JsonFactory JSON_FACTORY = new JacksonFactory();
String refreshTokenString="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //from console
String accessTokenString ="yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; //from console
GoogleCredential credential = createCredentialWithRefreshToken(
TRANSPORT, JSON_FACTORY, new TokenResponse().setRefreshToken(refreshTokenString));
credential.setAccessToken("accessTokenString");
//exeucute HTTP request for offline accessTokenString
// Execute HTTP GET request to revoke current token.
HttpResponse response = TRANSPORT.createRequestFactory()
.buildGetRequest(new GenericUrl(
String.format(
"https://www.googleapis.com/drive/v2/changes",
credential.getAccessToken()))).execute();
System.out.println("RESPONSE: " +response);
}
public static GoogleCredential createCredentialWithRefreshToken(HttpTransport transport,
JsonFactory jsonFactory, TokenResponse tokenResponse) {
HttpTransport TRANSPORT = new NetHttpTransport();
JsonFactory JSON_FACTORY = new JacksonFactory();
return new GoogleCredential.Builder().setTransport(transport)
.setJsonFactory(JSON_FACTORY)
.setClientSecrets(CLIENT_ID, CLIENT_SECRET)
.build()
.setFromTokenResponse(tokenResponse);
}
还有错误:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Login Required",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Login Required"
}
}
我正在使用有效的刷新令牌和访问令牌(从操场控制台工作),但从 Java 应用程序运行时,我在此处获得登录要求 401。我需要这个用于从服务器直接备份到云端硬盘的日常备份。
【问题讨论】:
标签: oauth-2.0 google-api google-drive-api google-oauth