gdata oauth2 авторизация NullPointerException: нет информации заголовка аутентификации

1

Я пытаюсь экспортировать/импортировать контакты google с помощью gdata + Oauth2 в своем веб-приложении. Приложение имеет клиентскую сторону на стороне js и java-сервера, обмениваясь данными через REST API. Сторона js выполняет auathorization через google, получая следующие данные

{  
   state:"38c4ebb6-b763-4e98-969c-16a86221ec71",
   access_token:"ya29.BwEGCaDeWTzGqIwewwlmWreAMZdgNNexN1efOVGDcyY0f-gzXUot51F-Tzy5BX39CwGpbrL3JGjQ",
   token_type:"Bearer",
   expires_in:"3600"
}

Я пытаюсь использовать access_token, чтобы получить контакты следующим образом

ContactsService myService = new ContactsService(APP_NAME);
myService.setHeader("Authorization", "Bearer " + accessToken);
return GoogleDataUtils.getContactList(getContactFeed(myService));

где

private ContactFeed getContactFeed(ContactsService myService) throws ServiceException, IOException {
        URL feedUrl = new URL(URL_FOR_FEED);
        Query myQuery = new Query(feedUrl);
        myQuery.setMaxResults(Integer.MAX_VALUE);
        ContactFeed resultFeed = myService.getFeed(myQuery, ContactFeed.class);
        return resultFeed;
    }

Но я получаю

Exception in thread "main" java.lang.NullPointerException: No authentication header information
    at com.google.gdata.util.AuthenticationException.initFromAuthHeader(AuthenticationException.java:96)
    at com.google.gdata.util.AuthenticationException.<init>(AuthenticationException.java:67)
    at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:608)
    at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:564)
    at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:560)
    at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:538)
    at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:536)
    at com.google.gdata.client.Service.getFeed(Service.java:1135)
    at com.google.gdata.client.Service.getFeed(Service.java:1077)
    at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:676)
    at com.google.gdata.client.Service.getFeed(Service.java:1034)

Я нашел разрешенный вопрос для SpreadsheetService

gdata-java-client + oauth2 + access_token secret

Но это не сработало для меня.

Не могли бы вы указать мне, что я делаю неправильно? Любая помощь будет оценена

благодаря

  • 0
    Почему JS выполняет аутентификацию? Если у вас есть Java как серверная часть, вы должны следовать потоку использования OAuth2 для веб-приложений . Во всяком случае, что вывод accessToken на стороне Java?
  • 0
    Сторона JS выполняет oauth, потому что это всего лишь интерфейсная сторона, поэтому у меня нет возможности сделать oauth на сервере, который просто предоставляет REST API. Насколько я знаю, это правильное решение, поскольку передача токена обеспечена.
Теги:
oauth-2.0
google-api
gdata

2 ответа

2
Лучший ответ

Проблема была в области видимости на стороне JS - она не была установлена. Пробовал на Oauth игровой площадке от Google, получил токен и просто закодировал его - это сработало. После добавления области действия к стороне JS (любая библиотека JS Oauth поддерживает ее), я преуспел в аутентификации. Я рекомендую всем, кто сталкивается с такой проблемой, попытаться выполнить аутентификацию с помощью токена, созданного на игровой площадке Oauth, которая поможет устранить неполадки и найти проблему. благодаря

0

Добавьте это обходное решение в блок initService

myService.getRequestFactory().setHeader("User-Agent", applicationName);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню