2010-09-08 19 views
5

Mi siguiente código devuelve un error no autorizado 401 cada vez que en el este punto:401 no autorizado usando Yahoo OAuth

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://query.yahooapis.com/v1/yql?q=select%20fields.value%20from%20social.contacts%20where%20guid%3Dme&diagnostics=false"); 
request.Headers.Add(
    "Authorization: OAuth " + 
    "realm=\"" + "yahooapis.com" + "\"," + 
    "oauth_consumer_key=\"" + ConfigurationManager.AppSettings["yahoo_oauth_consumer_key"] + "\"," + 
    "oauth_nonce=\"" + Guid.NewGuid().ToString() + "\"," + 
    "oauth_signature_method=\"" + "PLAINTEXT" + "\"," + 
    "oauth_timestamp=\"" + ((DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1).Ticks)/(1000 * 10000)).ToString() + "\"," + 
    "oauth_token=\"" + accessToken.TokenValue + "\"," + 
    "oauth_version=\"1.0" + "\"," + 
    "oauth_signature=\"" + ConfigurationManager.AppSettings["yahoo_oauth_signature"] + "%26" + "\"" 
); 
StreamReader streamReader = new StreamReader(request.GetResponse().GetResponseStream(), true); 

Y cuando me paso en el cada vez de código veo toda la información está ahí que las solicitudes de Yahoo tengan en la cabecera, sin embargo, cada vez que sale este 401.

Respuesta

1

Ok primero de todos:

http://www.youtube.com/watch?v=lZLP0siJI-8&feature=related

en segundo lugar, la solución;

no lo ejecute desde localhost: P

Cuando me inscribí en Yahoo Debería haber leído con más cuidado, he firmado una segunda vez sólo para ver, y se afirma claramente de qué dominio se quiere hacer las llamadas a nuestras API.

+1

para fines de desarrollo, prueba y depuración que debe ejecutar desde localhost. Hay una manera de hacer eso. Puede modificar el archivo C: \ Windows \ System32 \ drivers \ etc \ hosts al punto 127.0.0.1 en www.YOUR-DOMAIN.com. Puede reemplazar C: \ con cualquier partición que aloje su sistema operativo Windows. Estoy seguro de que el sistema operativo que no es Windows debe tener una forma alternativa de hacer lo mismo. –

2

Como estoy seguro que sabes, 401 significa no autorizado. Probablemente significa que su firma no es válida.

No publica todo su código, pero no veo cómo podría generar correctamente la firma correcta, ya que su método de firma parece no tomar ninguno de los parámetros, lo más significativo es la fecha y hora, - como entrada. Si ya calculó la firma correctamente, entonces necesita usar la misma marca de tiempo y cero en el encabezado Autorizado; usar uno diferente significará que la firma no es válida.

1

yo estaba corriendo en el mismo ... Hay que leer cuidadosamente las especificaciones:

http://developer.yahoo.com/oauth/guide/oauth-requesttoken.html

seguir cuidadosamente las instrucciones para cada campo. Por ejemplo, no veo que haya especificado oauth_callback = "oob". También me estaba perdiendo ese campo, tan pronto como lo especifiqué, obtuve el token.

+1

Ah, y el localhost * no * importa. – djunod

0

Estoy respondiendo con la esperanza de que ayudará a otra persona.

Yahoo! almacena el dominio en minúsculas y estaba almacenando el dominio en mayúsculas y minúsculas en la variable de devolución de llamada.

Así que convertí el dominio a todas las minúsculas y lo puse como prefijo con "www". que me hizo resolver el problema. Intenta golpear el Yahoo! servidores con la URL final de OAUTH desde cualquier navegador para ver el mensaje de error real. Dentro de la aplicación solo dice "no autorizado".

Cuestiones relacionadas