簡體   English   中英

為OAuth創建簽名和Nonce(Ruby)

[英]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上的erikeldridgeOAuth初學者指南中的 這一要點

編輯

我發現在Ruby標准庫SecureRandom中有更好的方法來生成隨機字符串。

nonce也可以只是一個大型的,適當的隨機數 - 例如,使用Ruby的SecureRandom類(不要使用'rand'):

require 'securerandom'

...

nonce = SecureRandom.hex()

這將生成十六進制格式的16字節隨機數。

為什么你不只是使用Oauth紅寶石寶石來做到這一點?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM