2011-01-27 18 views

risposta

1

Ho sviluppato una libreria C# per OAuth che è davvero semplice da usare e da installare e utilizzare. Il progetto è un progetto open source e ho incluso un'applicazione demo che lavora contro 1. Google 2. Twitter 3. Yahoo 4. Vimeo

Naturalmente qualsiasi altro fornitore di OAuth farà pure. È possibile trovare l'articolo e la biblioteca qui

OAuth C# Library

5

ho scritto un gestore OAuth per questo, perché le opzioni esistenti erano troppo complicato.

OAuth with Verification in .NET

La classe si concentra su OAuth, e lavora in particolare con Twitter. Questa non è una classe che espone un sacco di metodi per l'intera superficie dell'API web di Twitter. È solo OAuth. Se si desidera aggiornare lo stato su Twitter, questa classe non espone alcun metodo "UpdateStatus". Ho capito che è semplice per i progettisti di app costruire il messaggio HTTP che vogliono inviare. In altre parole, il messaggio HTTP è l'API. Ma la roba di OAuth può essere un po 'complicata, quindi merita un'API, che è la classe OAuth.

Ecco esempio di codice per richiedere una "richiesta di token":

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"); 

questo è tutto. In Twitter, l'URL specifico del servizio per la richiesta di token è "https://api.twitter.com/oauth/request_token".

Una volta ricevuto il token di richiesta, si apre l'interfaccia utente del browser Web in cui l'utente concederà esplicitamente l'approvazione alla propria app per accedere a Twitter. È necessario farlo una volta, la prima volta che viene eseguita l'app. Fate questo in un controllo WebBrowser incorporato, con il codice in questo modo:

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

Per Twitter, l'URL per questo è "https://api.twitter.com/oauth/authorize?oauth_token=" con l'oauth_token aggiunto.

Afferrare il pin dall'interfaccia utente del browser Web, tramite alcuni scatti di schermo HTML.Quindi richiedere un "token di accesso":

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

Per Twitter, l'URL è "https://api.twitter.com/oauth/access_token".

Non è necessario gestire in modo esplicito il token di accesso; la classe OAuthManager lo mantiene in stato per te. Ma il token e il segreto sono disponibili in oauth["token"] e oauth["token_secret"], nel caso in cui si desideri scriverli nella memoria permanente. Per fare richieste con quel token di accesso, genera l'intestazione AuthZ in questo modo:

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

... dove url è il punto finale delle risorse. Per aggiornare lo stato dell'utente su Twitter, sarebbe "http://api.twitter.com/1/statuses/update.xml?status=Hello".

Quindi impostare la stringa risultante nell'intestazione HTTP denominata Autorizzazione e inviare la richiesta HTTP all'URL.

In esecuzioni successive, quando hai già il token di accesso e segreto, è possibile creare un'istanza della OAuth.Manager in questo modo:

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; 

Poi basta generare l'intestazione AuthZ, e fare le vostre richieste, come descritto sopra.

Scaricare il DLL
Vedere le Documentation

+0

Questo è fantastico. Grazie! –

+0

Ottimo lavoro, grazie. Ma il link alla documentazione è spento ... sai perché? –

2

sono in ritardo alla conversazione, ma ho creato un video tutorial per chiunque altro che sta avendo questo stesso compito. Come te, mi sono divertito un sacco a capire l'errore 401.

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

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

codice (nel caso in cui non si vuole lasciare questa pagina):

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."); 
       } 
      } 
     } 
    } 
} 
Problemi correlati