Google oauth2 Java Contacts Service - 文档冲突

时间:2011-12-29 17:19:56

标签: java oauth-2.0 gdata gdata-api

我已使用以下说明注册了我的web应用程序以用于oath2:

http://code.google.com/apis/accounts/docs/OAuth2.html

这意味着我的客户端是使用客户端ID,客户端密钥和重定向URI创建的。

按照

配置我的网络应用程序

http://code.google.com/apis/accounts/docs/OAuth2WebServer.html

我收到来自google的请求参数中的代码,然后我可以使用它来请求访问令牌,该令牌以JSON格式提供,其格式如下:

{   “ACCESS_TOKEN”: “1 / fFAGRNJru1FTz70BzhT3Zg”,   “expires_in”:3920,   “token_type”: “承载” }

完成此操作后,我可以使用该访问令牌代表用户访问google api:

获取https://www.googleapis.com/oauth2/v1/userinfo?access_token=1/fFBGRNJru1FQd44AzqT3Zg

通过简单地将访问令牌作为请求参数传递来完成此操作。

然而,当我开始使用Java API(在这种情况下是谷歌联系人)时,我在HMAC-SHA1的文档中得到以下内容:

GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
oauthParameters.setOAuthToken(ACCESS_TOKEN);
oauthParameters.setOAuthTokenSecret(TOKEN_SECRET);

DocsService client = new DocsService("yourCompany-YourAppName-v1");
client.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer());

URL feedUrl = new URL("https://docs.google.com/feeds/default/private/full");
DocumentListFeed resultFeed = client.getFeed(feedUrl, DocumentListFeed.class);
for (DocumentListEntry entry : resultFeed.getEntries()) {
  System.out.println(entry.getTitle().getPlainText());
}

或以下针对RSA-SHA1

GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
oauthParameters.setOAuthToken(ACCESS_TOKEN);

PrivateKey privKey = getPrivateKey("/path/to/your/rsakey.pk8");  // See above for the defintion of getPrivateKey()

DocsService client = new DocsService("yourCompany-YourAppName-v1");
client.setOAuthCredentials(oauthParameters, new OAuthRsaSha1Signer(privKey));

URL feedUrl = new URL("https://docs.google.com/feeds/default/private/full");
DocumentListFeed resultFeed = client.getFeed(feedUrl, DocumentListFeed.class);
for (DocumentListEntry entry : resultFeed.getEntries()) {
  System.out.println(entry.getTitle().getPlainText());
}

首先,似乎如果我正在使用标准的http而不是java包装器,我需要提供的只是一个访问令牌。我错过了什么或者这些附加参数来自哪里?主要是TOKEN_SECRET,在文档中没有提到。也没有提到必须提供CONSUMER_KEY和CONSUMER_SECRET。我假设它们是客户端ID和客户端密钥的替代名称,但我不明白为什么我现在必须提供它们。最后,当使用谷歌API的控制台设置我的应用程序时,没有提到两种不同的加密类型,我将使用哪一种,我在这里错过了什么?

2 个答案:

答案 0 :(得分:1)

您展示的Java代码示例基于OAuth 1.0(不是OAuth 2.0),它具有一些在OAuth 2.0中简化的加密要求。在使用Google Contacts API的某些情况下,您需要OAuth 1.0。请参阅:http://code.google.com/apis/contacts/docs/3.0/developers_guide.html#GettingStarted

答案 1 :(得分:0)

我在这里找到了答案:

gdata-java-client + oauth2 + access_token secret

谷歌很好地记录了这一点。