11

アプリケーションから SmugMug の API にアクセスして、ユーザーのアルバムと画像を取得しようとしています (ユーザーは ruby​​ の OmniAuth によって認証されています)。

SmugMug の OAuth APIによると、OAuth には 6 つのパラメーターが必要です。

OmniAuth でトークンを取得でき、タイムスタンプは簡単なはずです (Time.now.to_i ですよね?)。生成方法がわからないものが 2 つあります。oauth_nonce と oauth_signature です。

oauth docs によると、タイムスタンプを介して nonce を生成しますが、どのように正確に行うのでしょうか? 特定の長さで、特定の文字に制限する必要がありますか?

もちろんサインも。ruby で HMAC-SHA1 sig を生成するにはどうすればよいですか? oauth gem でできることは知っていますが、OmniAuth で使用するために自分で生成したいと思います。コードを見ると、oauth gem が sig を生成する方法を解読するのに苦労しています。

助けてくれてありがとう。

4

3 に答える 3

15

署名の場合:

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でランダムな文字列を生成するより良い方法があることを発見しました。

于 2011-01-21T12:11:59.837 に答える
5

ナンスは、単純に大きめの適切な乱数にすることもできます。たとえば、RubyのSecureRandomクラスを使用します(「rand」は使用しないでください)。

require 'securerandom'

..。

nonce = SecureRandom.hex()

これにより、16バイトの乱数が16進形式で生成されます。

于 2011-12-14T15:37:15.790 に答える
1

それを行うためにOauth ruby​​ gemを使用しないのはなぜですか?

于 2010-12-24T08:08:15.813 に答える