2014-05-22 40 views
1

我正嘗試構建一個使用oauth 1簽名請求對用戶進行身份驗證的服務。該請求包含oauth令牌,簽名,隨機數和消費者密鑰。服務器可以訪問相應的祕密,但不清楚如何使用oauth gem來驗證令牌並檢索相應的用戶。該標記最初是使用oauth-rails插件生成的,但驗證需要在與原始rails應用程序不同的服務器上進行(但可以訪問相同的基礎數據庫)。如何使用oauth gem驗證傳入請求的令牌?

如何使用oauth gem來完成此操作?

我已經瀏覽了oauth和oauth-plugin gem的源代碼,但是我不知道這個驗證實際發生在哪裏。幾乎我能找到的所有文檔都是指使用oauth gem作爲消費者,而不是提供者。

回答

0

我終於想出了這個答案,所以我會把它放在希望幫助未來的人的希望。

一旦從底層數據庫中檢索到的accessToken和ClientApplication對象和檢查所述隨機數和時間戳,驗證簽名一樣簡單:

簽名= OAuth的:: Signature.verify(請求,{} )do | sigblock | [token.secret,ca.secret] end

如果簽名檢出,簽名將爲真。注意 - 如果您使用的是http代理(如nginx),則可能無法爲https請求正確設置SERVER_PORT環境變量,您可能必須手動進行設置。如果這個(或任何其他看起來很小的請求的部分)關閉,即使請求有效,它也可能導致簽名驗證失敗。