加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:18:50 所属栏目:百科 来源:网络整理
导读:我希望从我的应用程序访问SmugMug的API来获取用户的相册和图像(用户已经通过 ruby的OmniAuth进行了身份验证). 根据SmugMug’s OAuth API,OAuth需要六个参数. 我可以使用OmniAuth获取令牌,时间戳应该很简单(Time.now.to_i对吗?).有两件事我不知道如何生成 –
我希望从我的应用程序访问SmugMug的API来获取用户的相册和图像(用户已经通过 ruby的OmniAuth进行了身份验证).

根据SmugMug’s 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

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

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

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中有更好的方法来生成随机字符串.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读