API Календаря Google и проблема с OAuth - PullRequest
3 голосов
/ 01 июля 2011

Я получаю ошибку

com.google.gdata.util.AuthenticationException: Unknown authorization header
     at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:600) ~[gdata-core-1.0.jar:na]
     at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:563) ~[gdata-core-1.0.jar:na]
     at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:552) ~[gdata-core-1.0.jar:na]
     at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:530) ~[gdata-core-1.0.jar:na]
     at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:535) ~[gdata-core-1.0.jar:na]

при попытке доступа к данным Календаря Google через их API.

Вот что происходит до этой ошибки.

1)Я аутентифицируюсь с помощью Google:

final AccessTokenResponse response =
          new GoogleAuthorizationCodeGrant(httpTransport,
                    jsonFactory,
                    clientId, clientSecret, authorizationCode,
                    redirectUrl).execute();

final GoogleAccessProtectedResource accessProtectedResource =
          new GoogleAccessProtectedResource(
                    response.accessToken, httpTransport, jsonFactory,
                    clientId, clientSecret,
                    response.refreshToken);

LOGGER.debug("response.accessToken: {}", response.accessToken);

this.oauthAccessToken = response.accessToken;

...

2) Я читаю некоторые данные через API задач:

    this.service =
            new Tasks(httpTransport, accessProtectedResource,
                    jsonFactory);
    this.service.setApplicationName(this.applicationName);

Кажется, это работает.

3) Затем я пытаюсьдля чтения данных из API Календаря Google:

    final OAuthHmacSha1Signer signer = new OAuthHmacSha1Signer();

    final GoogleOAuthParameters  oauth = new GoogleOAuthParameters ();

    oauth.setOAuthConsumerKey("myapp.com");
    oauth.setOAuthConsumerSecret(CLIENT_SECRET); // Client secret from "Google API access" page, "Client secret" entry
    oauth.setOAuthToken(this.oauthAccessToken); // Access token from step 1
    oauth.setOAuthTokenSecret(aAuthorizationCode); 
    // aAuthorizationCode is taken from the callback URL.
    // For http://myapp.com/oauth2callback?code=4/uy8Arb4bhRPwWYSr3QwKPt9lIZkt
    // aAuthorizationCode is equal to "4/uy8Arb4bhRPwWYSr3QwKPt9lIZkt" (without quotes)

    oauth.setScope(SCOPE_CALENDAR); // https://www.google.com/calendar/feeds/

    final CalendarService calendarService =
            new CalendarService(APPLICATION_NAME);

    calendarService
            .setOAuthCredentials(oauth, signer);


    LOGGER.debug("calendarService: {}", calendarService);

    final URL feedUrl =
            new URL(
                    "http://www.google.com/calendar/feeds/default/allcalendars/full");
    final CalendarFeed resultFeed =
            calendarService.getFeed(feedUrl, CalendarFeed.class);

В последней строке (calendarService.getFeed ...) возникает вышеупомянутое исключение.

У меня есть следующие вопросы:

1) Правильно ли мой звонок

oauth.setOAuthConsumerKey

?

I.е.«Ключ потребителя» равен «Имя продукта» в консоли API Google или полю «Идентификатор клиента» (значение равно 42912397129473.apps.googleusercontent.com)

2) Правильно ли задано значение setOAuthTokenSecret?И. е.это код, который я получаю, когда Google перенаправляет пользователя обратно в мое приложение?

3) Если на вопросы 2 и 3 ответили «да», что еще может быть причиной моей проблемы?

Спасибо

Дмитрий

PS: Раньше я мог получить доступ к календарю Google с простым доступом (т.е. с помощью имени пользователя и пароля Google).Однако сейчас это не вариант, поскольку пользователи моего приложения не захотят выдавать свой пароль Google.

1 Ответ

0 голосов
/ 03 июля 2011

Наконец, я решил свою проблему, следуя примеру на

http://code.google.com/p/gdata-java-client/source/browse/trunk/java/sample/oauth/OAuthExample.java

Мой совет всем будущим жертвам ^ W пользователям OAuth: обратите внимание на мельчайшие детали в OAuthучебные пособия.OAuth дьявол кроется в деталях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...