2011-01-27 21 views

Respuesta

1

he desarrollado una biblioteca de C# para OAuth que es muy sencillo de utilizar y poner en marcha con. El proyecto es un proyecto de código abierto y he incluido una aplicación de demostración que trabaja contra 1. Google 2. Twitter 3. 4. Yahoo Vimeo

Por supuesto que cualquier otro proveedor OAuth hará también. Puede encontrar el artículo y la biblioteca aquí

OAuth C# Library

5

escribí un gestor de OAuth para esto, porque las opciones existentes eran demasiado complicados.

OAuth with Verification in .NET

La clase se centra en OAuth, y trabaja específicamente con Twitter. Esta no es una clase que expone una tonelada de métodos para toda la superficie de la API web de Twitter. Es solo OAuth. Si desea actualizar el estado en Twitter, esta clase no expone el método "UpdateStatus". Pensé que era simple para los diseñadores de aplicaciones construir el mensaje HTTP que deseaban enviar. En otras palabras, el mensaje HTTP es la API. Pero las cosas de OAuth pueden ser un poco complicadas, por lo que merece una API, que es lo que es la clase OAuth.

Aquí es código de ejemplo para solicitar un "token de solicitud":

var oauth = new OAuth.Manager(); 
oauth["consumer_key"] = MY_APP_SPECIFIC_CONSUMER_KEY; 
oauth["consumer_secret"] = MY_APP_SPECIFIC_CONSUMER_SECRET;  
oauth.AcquireRequestToken(SERVICE_SPECIFIC_REQUEST_TOKEN_URL, "POST"); 

QUE ES. En Twitter, la URL específica del servicio para solicitar tokens es "https://api.twitter.com/oauth/request_token".

Una vez que el token de solicitud, usted hace estallar el navegador web de interfaz de usuario en la que el usuario va a otorgar explícitamente la aprobación para su aplicación, para acceder a Twitter. Debe hacer esto una vez, la primera vez que se ejecuta la aplicación. Para ello, en un control WebBrowser incrustado, con el código de este modo:

var url = SERVICE_SPECIFIC_AUTHORIZE_URL_STUB + oauth["token"]; 
webBrowser1.Url = new Uri(url); 

Por Twitter, la URL para esto es "https://api.twitter.com/oauth/authorize?oauth_token=" con el oauth_token anexa.

Grab el pasador desde el navegador web de interfaz de usuario, a través de algún captura de imágenes HTML.A continuación, solicitar un "token de acceso":

oauth.AcquireAccessToken(URL_ACCESS_TOKEN, 
         "POST", 
         pin); 

Para Twitter, esa URL es "https://api.twitter.com/oauth/access_token".

No necesita manejar explícitamente el token de acceso; la clase OAuthManager lo mantiene en estado para usted. Pero el token y el secreto están disponibles en oauth["token"] y oauth["token_secret"], en caso de que quiera eliminarlos en el almacenamiento permanente. Para realizar solicitudes relacionadas con ese token de acceso, genere la cabecera authz así:

var authzHeader = oauth.GenerateAuthzHeader(url, "POST"); 

... url donde es el punto final de los recursos. Para actualizar el estado del usuario en Twitter, sería "http://api.twitter.com/1/statuses/update.xml?status=Hello".

A continuación, establezca la cadena resultante en el encabezado HTTP denominado Autorización, y envíe la solicitud HTTP a la url.

En ejecuciones posteriores, cuando ya tiene el token de acceso y secreto, se puede crear una instancia del OAuth.Manager así:

var oauth = new OAuth.Manager(); 
oauth["consumer_key"] = MY_APP_SPECIFIC_CONSUMER_KEY; 
oauth["consumer_secret"] = MY_APP_SPECIFIC_CONSUMER_SECRET; 
oauth["token"] = your_stored_access_token; 
oauth["token_secret"] = your_stored_access_secret; 

A continuación, sólo generan el encabezado authz, y crea sus peticiones como se describe anteriormente.

Descargar el DLL
Ver las Documentation

+0

Esto es asombroso. ¡Gracias! –

+0

Buen trabajo, gracias. Pero el enlace de documentación está desactivado ... ¿sabes por qué? –

2

llego tarde a la conversación, pero he creado un tutorial de vídeo para cualquier otra persona que está teniendo esta misma tarea. Al igual que tú, me divertí muchísimo descifrando el error 401.

vídeo: http://www.youtube.com/watch?v=TGEA1sgMMqU

Tutorial: http://www.markhagan.me/Samples/Grant-Access-And-Tweet-As-Twitter-User-ASPNet

de código (en caso de que no desea salir de esta página):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

using Twitterizer; 

namespace PostFansTwitter 
{ 
    public partial class twconnect : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      var oauth_consumer_key = "gjxG99ZA5jmJoB3FeXWJZA"; 
      var oauth_consumer_secret = "rsAAtEhVRrXUTNcwEecXqPyDHaOR4KjOuMkpb8g"; 

      if (Request["oauth_token"] == null) 
      { 
       OAuthTokenResponse reqToken = OAuthUtility.GetRequestToken(
        oauth_consumer_key, 
        oauth_consumer_secret, 
        Request.Url.AbsoluteUri); 

       Response.Redirect(string.Format("http://twitter.com/oauth/authorize?oauth_token={0}", 
        reqToken.Token)); 
      } 
      else 
      { 
       string requestToken = Request["oauth_token"].ToString(); 
       string pin = Request["oauth_verifier"].ToString(); 

       var tokens = OAuthUtility.GetAccessToken(
        oauth_consumer_key, 
        oauth_consumer_secret, 
        requestToken, 
        pin); 

       OAuthTokens accesstoken = new OAuthTokens() 
       { 
        AccessToken = tokens.Token, 
        AccessTokenSecret = tokens.TokenSecret, 
        ConsumerKey = oauth_consumer_key, 
        ConsumerSecret = oauth_consumer_secret 
       }; 

       TwitterResponse<TwitterStatus> response = TwitterStatus.Update(
        accesstoken, 
        "Testing!! It works (hopefully)."); 

       if (response.Result == RequestResult.Success) 
       { 
        Response.Write("we did it!"); 
       } 
       else 
       { 
        Response.Write("it's all bad."); 
       } 
      } 
     } 
    } 
} 
Cuestiones relacionadas