2015-06-10 3 views
0

При попытке подключиться к Picasaweb API в Java, я получил эту ошибку:Ошибка «Недопустимый маркер: Невозможно разобрать называемый маркер строки» при попытке получить доступ к Picasaweb API с oauth2 из Java

com.google.gdata.util.ServiceForbiddenException: Forbidden 
Token invalid - Invalid token: Cannot parse referred token string 
    at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:605) 
    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.insert(Service.java:1409) 
    at com.google.gdata.client.GoogleService.insert(GoogleService.java:613) 
    at com.google.gdata.client.media.MediaService.insert(MediaService.java:380) 

Здесь мой код:

final String[] SCOPESArray = { "https://picasaweb.google.com/data/" }; 
final List SCOPES = Arrays.asList(SCOPESArray); 
final GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(new NetHttpTransport()) 
    .setJsonFactory(new JacksonFactory()) 
    .setServiceAccountId("[email protected]") 
    .setServiceAccountScopes(SCOPES) 
    .setServiceAccountPrivateKeyFromP12File(new File("key.p12")).build(); 
final PicasawebService picasaService = new PicasawebService("toto"); 
picasaService.setOAuth2Credentials(credential); 
picasaService.insert(new URL(FEED_URL), album); 

Я думаю somethig отсутствует, как связь между учетной записью службы и учетной записью Picasa сделана? Я попытался было URL в объеме, как https://picasaweb.google.com/data/entry/api/user/ «+ USER_ID или» https://picasaweb.google.com/data/feed/api/user/ "+ USER_ID, но без успеха ...

Я хочу, чтобы избежать„согласия пользователя“диалог каждый раз, когда приложению доступ к альбому Picasa.

я не нашел примеры PicasaWeb API и oauth2, так что если кто-нибудь есть идея ... Спасибо

Edit: я нашел информацию о «делегировании общедоменного полномочия для учетной записи службы» https://developers.google.com/identity/protocols/OAuth2ServiceAccount которые делают то, что я хочу, с setServiceAccountUser("[email protected]"), но, похоже, он работает только для доменов Google Apps.

ответ

1

Какова связь между учетной записью службы и учетной записью Picasa?

Нет ссылки. Учетная запись службы и учетная запись Picasa являются двумя разными пользователями в отношении Google. Вы, вероятно, (я предполагаю, что вы не объяснили свой случай использования) НЕ хотите использовать учетную запись службы.

Рассматривайте API Picasa и OAuth как два совершенно разных учебных упражнения. Подумайте о OAuth как о том, что приводит к тому, что у вас есть токен доступа, а затем API Picasa, как вещь, в которую вы ткнули этот токен доступа. попробуйте использовать OAuth Playground (https://developers.google.com/oauthplayground/), чтобы высмеять то, чего вы хотите достичь. Это научит вас всему, что вам нужно знать о OAuth, и покажите вам, как выглядят http-запросы, которые впоследствии можно сравнить с вашим приложением.

+0

Спасибо @pinoyyid. Мой вариант использования: приложение (а не из пользовательского интерфейса, я хочу, чтобы пользовательское согласие не было) каждый раз должен создавать альбомы в учетной записи Picasaweb. – Thierry

+0

Эта страница: https://developers.google.com/identity/protocols/OAuth2WebServer описывает, что мне нужно. Я могу запросить согласие пользователя только в первый раз, а затем использовать токен обновления. Спасибо, что поставили меня в правильном направлении. Я напишу свой код, когда он сработает. – Thierry

+0

Этот ответ даст вам долгий путь http://stackoverflow.com/questions/19766912/how-do-i-authorise-an-app-web-or-installed-without-user-intervention-canonic – pinoyyid