2013-04-13 17 views
5

Sto iniziando a strapparmi i capelli con Twitter e provare ad accedere a un utente !!! Ho Facebook, Google, OpenId tutto funzionante, solo Twitter è un dolore.DotNetOpenAuth Twitter Authenticaion Restituzione 401 Non autorizzata

Ricevo costantemente 401 Non autorizzato quando provo a eseguire il mio codice e per la vita di me non riesco a capire perché.

Ho creato un client Twitter e lo sto utilizzando con InMemoryTokenManager dalla soluzione di esempio DotNetOpenAuth. Il mio client Twitter è qui

public class TwitterClient 
{ 
    private string UserName { get; set; } 

    private static readonly ServiceProviderDescription ServiceDescription = 
     new ServiceProviderDescription 
     { 
      RequestTokenEndpoint = new MessageReceivingEndpoint(
             "https://api.twitter.com/oauth/request_token", 
             HttpDeliveryMethods.GetRequest | 
             HttpDeliveryMethods.AuthorizationHeaderRequest), 

      UserAuthorizationEndpoint = new MessageReceivingEndpoint(
             "https://api.twitter.com/oauth/authorize", 
             HttpDeliveryMethods.GetRequest | 
             HttpDeliveryMethods.AuthorizationHeaderRequest), 

      AccessTokenEndpoint = new MessageReceivingEndpoint(
             "https://api.twitter.com/oauth/access_token", 
             HttpDeliveryMethods.GetRequest | 
             HttpDeliveryMethods.AuthorizationHeaderRequest), 

      TamperProtectionElements = new ITamperProtectionChannelBindingElement[] { new HmacSha1SigningBindingElement() }, 
     }; 

    IConsumerTokenManager _tokenManager; 

    public TwitterClient(IConsumerTokenManager tokenManager) 
    { 
     _tokenManager = tokenManager; 
    } 

    public void StartAuthentication() 
    { 
     var request = HttpContext.Current.Request; 
     using (var twitter = new WebConsumer(ServiceDescription, _tokenManager)) 
     { 
      var callBackUrl = new Uri(request.Url.Scheme + "://" + request.Url.Authority + "/Members/TwitterCallback"); 
      twitter.Channel.Send(
       twitter.PrepareRequestUserAuthorization(callBackUrl, null, null) 
      ); 
     } 
    } 

    public bool FinishAuthentication() 
    { 
     using (var twitter = new WebConsumer(ServiceDescription, _tokenManager)) 
     { 
      var accessTokenResponse = twitter.ProcessUserAuthorization(); 
      if (accessTokenResponse != null) 
      { 
       UserName = accessTokenResponse.ExtraData["screen_name"]; 
       return true; 
      } 
     } 

     return false; 
    } 
} 

e ho il seguente nel costruttore della mia MembersController che è istanziare l'InMemoryTokenManager con le credenziali corrette

_tokenManager = new InMemoryTokenManager(ConfigUtils.GetAppSetting("TwitterAppId"), ConfigUtils.GetAppSetting("TwitterAppSecret")); 

E i miei due azioni sono

public ActionResult LogonTwitter() 
    { 
     var client = new TwitterClient(_tokenManager); 
     client.StartAuthentication(); 
     return null; 
    } 

    public ActionResult TwitterCallback() 
    { 
     var client = new TwitterClient(_tokenManager); 

     if (client.FinishAuthentication()) 
     { 
      return new RedirectResult("/"); 
     } 

     // show error 
     return View("LogOn"); 
    } 

L'errore viene visualizzato nel StartAuthentication() nel mio TwitterClient. Appena chiama questa linea

twitter.Channel.Send(
       twitter.PrepareRequestUserAuthorization(callBackUrl, null, null) 
      ); 

ottengo il seguente errore

Error occurred while sending a direct message or getting the response. 
Inner Exception: The remote server returned an error: (401) Unauthorized. 

Qualcuno ha qualche consiglio? Ho passato gran parte di ieri e stamattina cercando di sistemarlo. Anche tutti gli esempi online che ho provato sembrano ottenere il retro non autorizzato di 401? C'è un problema noto con DotNetOpenAuth e Twitter?

Qualsiasi aiuto molto apprezzato.

risposta

5

Non riesco a ricordare la terminologia esatta ma hai impostato un URL di richiamata nell'app twitter (così come nel codice)? Ho avuto problemi simili di recente, anche quando sviluppo localmente credo che sia necessario impostare questo valore, anche se è solo un segnaposto

+0

Sto cercando un codice sameple di Facebook, ogni possibilità che tu voglia condividere ciò che hai? Continuo a ricevere l'errore 400 richiesta errata – user1186651

+0

Thankkkkkkkkksssssssssssss !!!!! – benjguin

+0

Grazie mille! :) –