我正在寻找从我的应用程序访问 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 github和 Beginner’s Guide to OAuth更多
编辑
后来我发现在 Ruby 标准库中有更好的方法来生成随机字符串,SecureRandom .
关于ruby-on-rails - 为 OAuth (Ruby) 创建签名和 Nonce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4524911/