0

我不知道出了什么问题。我总是com.google.gdata.client.GoogleService$SessionExpiredException: Token invalid Token invalid在发出 API 请求时得到。

我有以下流程:

  1. 链接用户帐户
  2. 使用凭据获取视频上传条目

我用来链接用户的代码(获取我的应用程序的权限)使用JdoDataStoreFactory来保留用户令牌并在 API 调用之间刷新信息。

当我要求用户授权我的应用程序时,我使用了以下范围:

https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtube.readonly

使用GoogleAuthorizationCodeFlowloadCredentials在请求他们的身份验证令牌时从我的应用程序中传入用户 ID。然后我将这些凭据提供给YouTubeService'sgetFeed方法,请求视频源的 url:http://gdata.youtube.com/feeds/api/users/default/uploads

它看起来像这样:

service.setOAuth2Credentials(credentials)
videoFeed = service.getFeed(new URL(USER_FEED_PREFIX + DEFAULT_USER
        + UPLOADS_FEED_SUFFIX), VideoFeed.class)

执行后,我总是得到堆栈跟踪:

com.google.gdata.client.GoogleService$SessionExpiredException:令牌无效 令牌无效

令牌无效

错误 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) 在 com.google.gdata.client.Service.getFeed(Service.java:998) 在 com.google.gdata.client.GoogleService.getFeed(GoogleService.java:645) 在 com.google.gdata.client。 Service.getFeed(Service.java:1017)

我向服务发起请求的方式是通过 curl,我的命令如下所示:

curl http://localhost:8080/user/someUserId/content

使用 Wireshark,我在请求中看到以下内容:

GET /feeds/api/users/default/uploads HTTP/1.1                                                                                   
Authorization: Bearer <the_auth_token_for_the_user>
User-Agent: MyApp YouTube-Java/1.0 GData-Java/null(gzip)
X-GData-Client: MyApp
Accept-Encoding: gzip
GData-Version: 2.0
Cache-Control: no-cache
Pragma: no-cache
Host: gdata.youtube.com
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

我被困住了。

4

1 回答 1

1

好的,我想通了。我试图查询用户上传的视频,显然对于一个应用程序来说,它必须获得https://www.googleapis.com/auth/youtube范围的授权,而不是我配置的范围

于 2013-10-03T17:14:07.947 回答