Google oauth2 Служба контактов Java - Конфликт в документации - PullRequest
1 голос
/ 29 декабря 2011

Я зарегистрировал свое веб-приложение для использования с oath2, используя следующие инструкции:

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

Это означает, что мой клиент создан с идентификатором клиента, секретом клиента и URI перенаправления.

Как только я настроил свое веб-приложение в соответствии с

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

Я получаю код в параметре запроса от Google, который затем можно использовать для запроса доступатокен, который поставляется в формате JSON в формате:

{"access_token": "1 / fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer"}

Как только это будет сделано, я могу использовать этот токен доступа для доступа к API Google от имени пользователя:

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

Это, как задокументировано, выполняется путем простой передачи доступатокен в качестве параметра запроса.

Однако, когда я перехожу на использование Java API (в данном случае контактов Google), я получаю следующее в документации для 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());
}

First off, кажется, что если бы я делал стандартный http, а не java-оболочку, все, что мне нужно было бы предоставить - это токен доступа.Я что-то упустил или откуда появились эти дополнительные параметры?В основном TOKEN_SECRET, о котором нет упоминания в документации.Также нет упоминания о необходимости указывать CONSUMER_KEY и CONSUMER_SECRET.Я предполагаю, что они являются альтернативными именами для идентификатора клиента и секрета клиента, но я не понимаю, почему я теперь должен предоставить их.Наконец, при настройке моего приложения с помощью консоли API Google не было упоминания о двух разных типах шифрования, и какой из них я собираюсь использовать, я что-то здесь тоже упускаю?

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

Примеры кода Java, которые вы показываете, основаны на OAuth 1.0 (не OAuth 2.0), который имеет некоторые криптографические требования, которые были упрощены в OAuth 2.0.В некоторых случаях с API контактов Google вам требуется OAuth 1.0.Смотри: http://code.google.com/apis/contacts/docs/3.0/developers_guide.html#GettingStarted

0 голосов
/ 30 декабря 2011

Я нашел ответ здесь:

gdata-java-client + oauth2 + access_token secret

Фантастически от Google, чтобы правильно задокументировать это.

...