2011-12-15 65 views
5

我已经能够使用Scribe API成功从Vimeo获取访问令牌。使用Scribe与Vimeo进行OAuth集成

但是,当我尝试访问受保护资源时,出现无效签名错误。我OAuthService,我用它来尝试访问受保护的资源,看起来像:

OAuthService service = new ServiceBuilder() 
    .provider(VimeoApi.class) 
    .apiKey(APIKEY) 
    .apiSecret(API_SECRET) 
    .signatureType(SignatureType.QueryString) 
    .build(); 

然后,我提出一个要求执行以下操作:

OAuthRequest orequest = new OAuthRequest(Verb.GET, "http://vimeo.com/api/rest/v2"); 
    orequest.addBodyParameter("method", "vimeo.videos.upload.getQuota"); 

这种失败,并告诉我,签名无效。

+1

方法PARAM将签名的一部分因为所有OAuth参数都被排序,编码并添加到基本字符串中。你怎么知道这不是签名的一部分? – 2011-12-16 16:43:08

+0

@Pablo你是对的!我使用了BaseStringExtractImpl并查看参数。谢啦。我不知道为什么它告诉我签名是无效的,你有什么想法吗? – stevebot 2011-12-16 17:11:17

回答

3

问题是,

orequest.addBodyParameter("method", "vimeo.videos.upload.getQuota"); 

抄写然后加入此参数用于形成签名基底线上。 Vimeo看到我在做GETmethod参数在请求正文中,而不是查询字符串,因此它没有将它包含在基本字符串中。因此,签名Vimeo预期与Scribe生成的不同。

我做了GET不过,所以我要通过这个参数的查询字符串,

orequest.addQuerystringParameter("method", "vimeo.videos.upload.getQuota"); 

这工作,因为会:

OAuthRequest orequest = new OAuthRequest(Verb.POST, "http://vimeo.com/api/rest/v2"); 
    orequest.addBodyParameter("method", "vimeo.videos.upload.getQuota");