![](/img/trans.png)
[英]errorInvalid / used nonce - Twitter oauth - Ruby on Rails
[英]Creating Signature and Nonce for OAuth (Ruby)
我希望从我的应用程序访问SmugMug的API以获取用户的相册和图像(用户已经通过ruby的OmniAuth进行了身份验证)。
根据SmugMug的OAuth API ,OAuth需要六个参数。
我可以使用OmniAuth获取令牌,时间戳应该很简单(Time.now.to_i对吗?)。 有两件事我不知道如何生成 - oauth_nonce和oauth_signature。
根据oauth docs,我通过时间戳生成nonce,但我究竟会怎么做呢? 它是否需要一定的长度并限于某些字符?
当然还有签名。 如何使用ruby生成HMAC-SHA1 sig? 我知道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
您不必从时间戳生成nonce,但它可以有意义,因为时间戳显然是唯一的,因此它为任何随机函数提供了良好的起始输入。
我用这个,(我从这里得到另一个问题并修改)
def nonce
rand(10 ** 30).to_s.rjust(30,'0')
end#def
但您可以使用任何生成唯一字符串的内容。
请参阅github上的erikeldridge和OAuth初学者指南中的 这一要点
我发现在Ruby标准库SecureRandom中有更好的方法来生成随机字符串。
nonce也可以只是一个大型的,适当的随机数 - 例如,使用Ruby的SecureRandom类(不要使用'rand'):
require 'securerandom'
...
nonce = SecureRandom.hex()
这将生成十六进制格式的16字节随机数。
为什么你不只是使用Oauth红宝石宝石来做到这一点?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.