2013-04-13 4 views
5

Я начинаю разрывать волосы с помощью Twitter и пытаться подписать пользователя! У меня есть Facebook, Google, OpenId все работает отлично, просто Twitter является PAIN.DotNetOpenAuth Twitter Аутентификация Возврат 401 Несанкционированный

Я постоянно получаю 401 Несанкционированный, когда я пытаюсь запустить свой код, и для жизни меня не может понять, почему.

Я создал твиттер-клиент, и я использую его с помощью InMemoryTokenManager из решения DotNetOpenAuth. Мой Twitter клиент здесь

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; 
    } 
} 

И я следующий в конструкторе моего MembersController который инстанцирования InMemoryTokenManager с правильными учетными данными

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

И две мои действия являются

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

Ошибка появляется в StartAuthentication() в моем TwitterClient. Как только он называет эту линию

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

Я получаю следующую ошибку

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

Кто-нибудь получил какие-либо советы? Я провел большую часть вчерашнего дня и сегодня утром пытался разобраться в этом. Все онлайн-примеры, которые я попробовал, также, похоже, получили 401 Unauthorized назад? Есть ли известная проблема с DotNetOpenAuth и Twitter?

Любая помощь очень ценится.

ответ

5

Я не помню точную терминологию, но вы создали URL-адрес обратного вызова в приложении Twitter (а также в коде)? У меня были аналогичные проблемы в последнее время, даже когда я разрабатываю локально, я считаю, что вам нужно установить это значение, даже если его просто заполнить.

+0

Я ищу код в facebook, например, любой шанс, что вы поделитесь тем, что у вас есть? Я все время получаю ошибку 400 плохой запрос – user1186651

+0

Thankkkkkkkkksssssssssssss !!!!! – benjguin

+0

Спасибо большое! :) –

Смежные вопросы