使用Oath时,在google站点中对contentfeed执行查询时,令牌无效

时间:2012-03-03 20:22:26

标签: java oauth-2.0 google-apps google-sites

我正试图让它发挥作用。当我使用客户端登录方法(用户名/密码)时,它工作正常,但誓言它不起作用。我想知道原因。

我正在使用Java Language Guide (v1.4)

中的这段代码
  

按路径检索页面

     

如果您知道Google网站中网页的相对路径,那么就是您   可以使用path参数来获取该特定页面。这个例子   将返回位于的页面   http://sites.google.com/site/siteName/path/to/the/page

ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl()));
query.setPath("/path/to/the/page");
ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);
for (BaseContentEntry<?> entry : contentFeed.getEntries()) {
  System.out.println(" title: " + entry.getTitle().getPlainText());
}

如果我使用客户端登录方法,一切正常。但是,当我使用Oath(两条腿)时,我得到以下回复:

com.google.gdata.util.AuthenticationException: Token invalid - Invalid token:
<HTML>
<HEAD>
<TITLE>Token invalid - Invalid token: </TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Token invalid - Invalid token: </H1>
<H2>Error 401</H2>
</BODY>
</HTML>

此版本可以正常使用:

SitesService client = new SitesService("Test");
client.setUserCredentials(USER_NAME, PASSWORD);

ContentQuery query = new ContentQuery(new URL(
    "https://sites.google.com/feeds/content/" + DOMAIN + "/" + SITE_NAME + "/"));

query.setPath("/7D502A5D7080697F65F838D56C4C4A09");
ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);
for (BaseContentEntry entry : contentFeed.getEntries()) {
    System.out.println("Title: " + entry.getTitle().getPlainText());
}

此版本引发错误:

SitesService client = new SitesService("Test");
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
oauthParameters.setScope("https://sites.google.com/feeds/content/");
client.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer());

ContentQuery query = new ContentQuery(new URL(
    "https://sites.google.com/feeds/content/" + DOMAIN + "/" + SITE_NAME + "/"
    + "?xoauth_requestor_id=" + USER_NAME));


query.setPath("/7D502A5D7080697F65F838D56C4C4A09");
ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);
for (BaseContentEntry entry : contentFeed.getEntries()) {
    System.out.println("Title: " + entry.getTitle().getPlainText());
}

我也注意到当我删除该行时:

query.setPath("/7D502A5D7080697F65F838D56C4C4A09");

不会抛出错误,但很明显它会返回网站中的所有页面。

1 个答案:

答案 0 :(得分:0)

您的网站是否公开?或者您是否启用了PAGE LEVEL PERMISSIONS并且该特定页面的人数有限,无法查看/编辑访问权限?
这可能是原因。