2014-05-22 42 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环境变量,您可能必须手动进行设置。如果这个(或任何其他看起来很小的请求的部分)关闭,即使请求有效,它也可能导致签名验证失败。