2011-12-15 44 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");