2011-07-20 6 views
7

Estoy intentando obtener un token de acceso y un secreto de un sitio que usa OAuth. El intercambio de token de solicitud y secreto de solicitud va bien, pero cuando llega el momento de obtener los tokens de acceso recibo el error "Invalid signature. Expected signature base string."Cómo resolver "Firma no válida. Serie de firmas base esperada" en OAuth 1.0

¿Alguien ha visto este error antes o sabe lo que podría estar mal? Estos son los datos que estoy recibiendo de vuelta (después urldecode -ing): I

Invalid signature. Expected signature base string: POST 
https://www.readability.com/api/rest/v1/oauth/access_token 
oauth_consumer_key=my_consumer_key 
oauth_nonce=d9aff6a0011a633253c5ff9613c6833d79d52cbe 
oauth_signature_method=HMAC-SHA1 
oauth_timestamp=1311186899 
oauth_token=C8GF7D6ytPzQKdZVpy 
oauth_verifier=ncUV4tJSrS 
oauth_version=1.0 
signature=7jUuk6fsEL8XNYxVWcsfGXEreK0%3D 
+5

¿Alguna vez solucionar este problema?Acabo de encontrar el mismo problema y ninguna de las respuestas me ayudó ... – Alfo

Respuesta

2

se puede echar un vistazo here, se preguntó hace una semana. Respuesta:

Obtener las características de la firma OAuth es siempre un gran dolor. Debería esforzarse para asegurarse de que la cadena base que genera su biblioteca es exactamente la que el servidor espera. Una vez que eso sea cierto, la única forma de que puedas arruinarlo es con la (s) clave (s) incorrecta (s).

+3

Sí, lo vi, pero fue bastante vago. ¿Hay alguna forma de verificar lo que espera el servidor? Parece que tengo todos los componentes necesarios de acuerdo con las especificaciones de OAuth aquí http://wiki.oauth.net/w/page/12238555/Signed-Callback-URLs –

0

No puedo comentar las respuestas por algún motivo, pero para responder a su pregunta en el comentario de la respuesta anterior, puede usar el área de juegos Oauth para ver qué quiere google para su cadena base. http://googlecodesamples.com/oauth_playground/index.php

+0

Puede publicar comentarios en su propia publicación en cualquier momento, pero [necesitará al menos 50 representantes para publicar comentarios en otras publicaciones] (http://stackoverflow.com/privileges/comment). –

-1

Estaba enfrentando ese problema reciente 1.0 después de buscar google Encontré un servicio web creado por alguien que genera la firma para oauth. Funcionó para mí el enlace es here. Echa un vistazo :)

+5

¿Qué pasa si el blog ya no está en línea? Entonces la respuesta ya no estaría disponible. Debe incluir la respuesta real en su respuesta, no enlazar a ella. – Manuel

+0

El blog está abajo –

0

Sé que esto es muy viejo, y esto podría no ayudar en lo más mínimo, pero esto lo conseguí con algo hoy, y haciendo un rawurlencode() en lugar de urlencode() lo arreglé para mí.

1

Como @genesis describió, es bastante doloroso obtener la clave de firma correcta, pero hay documentación para ello, que se puede ver en este enlace http://oauth.net/core/1.0/#encoding_parameters.

La regla del pulgar es cuando se trabaja con HMAC-SHA1,

  1. Generar una cadena de base de la firma como "Método (POST/GET/etc)" & "-cadena codificada-para-su-objetivo" & "encoded-string-of-your-oauth-param (clave de consumidor, nonce, método de firma, marca de tiempo, token y versión"
  2. El método de firma HMAC-SHA1 utiliza los secretos secretos de cliente y token de dos secretos como HMAC - Tecla del algoritmo SSHA 1. Para construir la clave, cada secreto está codificado en UTF8, codificado en URL y concatenado en una sola cadena con un carácter '&' como separador incluso si e su secreto está vacío.
  3. Con la cadena de base de firma como texto HMAC-SHA1 y secretos concatenados como clave, el cliente genera la firma. El algoritmo HMAC-SHA1 generará una cadena de octetos como resultado. La cadena de octetos debe estar codificada en base64 con '=' relleno
  4. La firma calculada se agrega a la solicitud utilizando el parámetro 'oauth_signature'. Cuando el servidor verifica la firma, este parámetro no se incluye en el flujo de trabajo de la firma, ya que no formaba parte de la cadena de base de la firma firmada por el cliente. Cuando la firma se incluye en la solicitud HTTP, debe codificarse adecuadamente según lo requiera el método utilizado para transmitir los parámetros.

Fuente: http://nouncer.com/oauth/authentication.html

Cuestiones relacionadas