ruby-on-rails - 为 OAuth (Ruby) 创建签名和 Nonce

标签 ruby-on-rails ruby oauth ruby-on-rails-3 omniauth

我正在寻找从我的应用程序访问 SmugMug 的 API 以获取用户的相册和图像(用户已通过 ruby​​ 的 OmniAuth 进行身份验证)。

根据 SmugMug's OAuth API , OAuth 需要六个参数。

我可以使用 OmniAuth 获取 token ,时间戳应该很简单(Time.now.to_i 对吗?)。有两件事我不知道如何生成——oauth_nonce 和 oauth_signature。

根据 oauth 文档,我通过时间戳生成了 nonce,但我该怎么做呢?它是否需要一定的长度并限制为某些字符?

当然还有签名。我将如何使用 ruby​​ 生成 HMAC-SHA1 签名?我知道 oauth gem 可以做到这一点,但我宁愿自己生成它以与 OmniAuth 一起使用。查看代码,我无法理解 oauth gem 如何生成 sig。

感谢您的帮助。

最佳答案

对于签名:

def sign( key, base_string )
  digest = OpenSSL::Digest::Digest.new( 'sha1' )
  hmac = OpenSSL::HMAC.digest( digest, key, base_string  )
  Base64.encode64( hmac ).chomp.gsub( /\n/, '' )
end#def

您不必从时间戳生成随机数,但它很有意义,因为时间戳显然是唯一的,因此它是任何随机化函数的良好起始输入。

我用这个,(我从这里的另一个问题得到并修改过的)

def nonce
  rand(10 ** 30).to_s.rjust(30,'0')
end#def

但您可以使用任何能生成唯一字符串的东西。

参见 this gist by erikeldridge on githubBeginner’s Guide to OAuth更多

编辑

后来我发现在 Ruby 标准库中有更好的方法来生成随机字符串,SecureRandom .

关于ruby-on-rails - 为 OAuth (Ruby) 创建签名和 Nonce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4524911/

相关文章:

ruby-on-rails - 在 docker 下应该将 actioncable URL 设置为什么?

ruby-on-rails - 如何让 authlogic 使用 Rails session 而不是它自己的 cookie?

ruby-on-rails - 为 Rails Assets 设置缓存控制

ruby - 在 Lisp/Ruby 中将 IF-ELSE 实现为过程

ruby - 由两个不同的分隔符分割的字符串

python - 使用 python 进行推特 oauth

django - Piston 准备好接受 OAuth 了吗?

mysql - 将 MySQL 转换为 Postgres

ruby-on-rails - rails : query results are not updated after changing data in sqlite

android - 寻找 OAuth 2.0 访问 gmail 的工作(完整项目)示例