Pregunta

Busco a API de acceso de SmugMug de mi solicitud para álbumes e imágenes de los usuarios de agarre (los usuarios no han sido autenticados mediante OmniAuth de rubí).

De acuerdo con SmugMug es OAuth API , OAuth requiere seis parámetros.

Me puede obtener el token con OmniAuth, y la marca de tiempo debe ser fácil (Time.now.to_i ¿verdad?). Hay dos cosas que no sé cómo generar -. El oauth_nonce y la oauth_signature

De acuerdo con la documentación de OAuth, que genera el valor de uso único a través de la marca de tiempo, pero exactamente cómo iba a hacer eso? ¿Tiene que ser una cierta longitud y limitado a ciertos personajes?

Y por supuesto la firma. ¿Cómo iba a generar una firma HMAC-SHA1 con el rubí? Sé que la gema oauth puede hacerlo, pero prefiero genero yo mismo para su uso con OmniAuth. Si examina el código, estoy teniendo problemas para descifrar cómo la gema oauth genera el sig.

Gracias por cualquier ayuda.

¿Fue útil?

Solución

para la firma

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

Usted no tiene que generar el valor de uso único de la marca de tiempo, pero puede tener sentido ya que la marca de tiempo es obviamente único, por lo que tiene una buena entrada para iniciar cualquier función de asignación al azar.

Yo uso este, (que obtuve de otra pregunta aquí y modificado)

def nonce
  rand(10 ** 30).to_s.rjust(30,'0')
end#def

pero se puede usar cualquier cosa que genera una cadena única.

este GIST por erikeldridge en github y guía para principiantes a OAuth para más

Editar

Desde entonces, he encontrado que hay una mejor manera de generar cadenas aleatorias en la biblioteca estándar de Ruby, SecureRandom .

Otros consejos

Un nonce también puede ser simplemente un gran-ish, número al azar adecuadamente - por ejemplo, el uso de la clase SecureRandom de Ruby (no utilizan 'rand'):

require 'securerandom'

...

nonce = SecureRandom.hex()

Esto genera un número aleatorio de 16 bytes en formato hexadecimal.

¿Por qué usted no sólo tiene que utilizar las gemas de rubí Oauth hacer eso?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top