我因为什么错而感到茫然。在发出API请求时,我总是收到com.google.gdata.client.GoogleService$SessionExpiredException: Token invalid Token invalid
。
我有以下流程:
我用来链接用户的代码(获取我的应用程序的权限)使用JdoDataStoreFactory
来持久保存用户令牌并刷新API调用之间的信息。
当我要求用户授权我的应用时,我使用了以下范围:
https://www.googleapis.com/auth/youtube.upload
https://www.googleapis.com/auth/youtube.readonly
使用GoogleAuthorizationCodeFlow
我在请求其身份验证令牌时使用的应用程序中传递了loadCredentials
来自我的应用程序的userId。然后,我将这些凭据提供给YouTubeService
的{{1}}方法,请求提供视频Feed的网址:getFeed
看起来像这样:
http://gdata.youtube.com/feeds/api/users/default/uploads
执行完毕后,我总是得到堆栈跟踪:
com.google.gdata.client.GoogleService $ SessionExpiredException:Token 无效令牌无效
令牌无效
错误 401
在 com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:570) 在 com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:560) 在 com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:538) 在 com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:536) 在com.google.gdata.client.Service.getFeed(Service.java:1135)at com.google.gdata.client.Service.getFeed(Service.java:998)at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:645) 在com.google.gdata.client.Service.getFeed(Service.java:1017)
我发起我的服务请求的方式是通过curl,我的命令如下:
service.setOAuth2Credentials(credentials)
videoFeed = service.getFeed(new URL(USER_FEED_PREFIX + DEFAULT_USER
+ UPLOADS_FEED_SUFFIX), VideoFeed.class)
使用Wireshark我在请求中看到以下内容:
curl http://localhost:8080/user/someUserId/content
我被困住了。
答案 0 :(得分:1)
好的,我想出来了。我试图查询用户上传的视频,显然对于应用来说,它必须获得https://www.googleapis.com/auth/youtube
范围的授权,而不是我配置的范围