【问题标题】:How do I use the oauth gem to validate a token passed into the request?如何使用 oauth gem 验证传递给请求的令牌?
【发布时间】:2014-05-22 17:35:32
【问题描述】:
我正在尝试构建一个使用 oauth 1 签名请求对用户进行身份验证的服务。该请求包括一个 oauth 令牌、签名、随机数和使用者密钥。服务器可以访问相应的秘密,但不清楚如何使用 oauth gem 来验证令牌并检索相应的用户。令牌最初是使用 oauth-rails 插件生成的,但验证需要在与原始 rails 应用程序不同的服务器上进行(但可以访问相同的底层数据库)。
如何使用 oauth gem 来完成此操作?
我查看了 oauth 和 oauth-plugin gems 的源代码,但我不知道这个验证实际发生在哪里。我能找到的几乎所有文档都提到使用 oauth gem 作为消费者,而不是提供者。
【问题讨论】:
标签:
ruby-on-rails
ruby
oauth
【解决方案1】:
我终于想出了这个问题的答案,所以我把它放在这里,希望将来能帮助别人。
一旦您从底层数据库检索了 AccessToken 和 ClientApplication 对象并检查了 nonce 和时间戳,验证签名就像这样简单:
signature = OAuth::Signature.verify(request, {}) do |sigblock|
[token.secret,ca.secret]
结束
如果签名签出,则签名为真。请注意 - 如果您使用 nginx 等 http 代理,则 SERVER_PORT 环境变量可能未正确设置为 https 请求,您可能必须手动设置它。如果此(或请求的任何其他看似很小的部分)关闭,即使请求有效,也可能导致签名验证失败。