2013-03-19 1 views
1

У меня был твиттер, работающий на моем сайте в течение многих лет. Я случайно решил протестировать его сегодня и выяснил, что он не работает.Вход в твиттер превращается в 401

Я использую dotnetopenauth 3.4.7.11121. У меня есть twitterConsumerKey и twitterConsumerSecret в моей веб-конфигурации. Мысли о том, где сначала искать проблемы?

Ошибка: «Удаленный сервер возвратил ошибку: (401)« Неавторизованный ».

Моего код Примечания:

public static OutgoingWebResponse StartSignInWithTwitter(bool forceNewLogin) 
    { 
     var redirectParameters = new Dictionary<string, string>(); 
     if (forceNewLogin) 
     { 
      redirectParameters["force_login"] = "true"; 
     } 
     Uri callback = MessagingUtilities.GetRequestUrlFromContext().StripQueryArgumentsWithPrefix("oauth_"); 
     var request = TwitterSignIn.PrepareRequestUserAuthorization(callback, null, redirectParameters); 
     return TwitterSignIn.Channel.PrepareResponse(request); 
    } 

Исключение:

[WebException: The remote server returned an error: (401) Unauthorized.] 
    System.Net.HttpWebRequest.GetResponse() +6442312 
    DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest request, DirectWebRequestOptions options) in c:\BuildAgent\work\a02b428f36957bca\src\DotNetOpenAuth\Messaging\StandardWebRequestHandler.cs:126 

[ProtocolException: Error occurred while sending a direct message or getting the response.] 
    DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest request, DirectWebRequestOptions options) in c:\BuildAgent\work\a02b428f36957bca\src\DotNetOpenAuth\Messaging\StandardWebRequestHandler.cs:169 
    DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest request) in c:\BuildAgent\work\a02b428f36957bca\src\DotNetOpenAuth\Messaging\StandardWebRequestHandler.cs:100 
    DotNetOpenAuth.Messaging.Channel.GetDirectResponse(HttpWebRequest webRequest) in c:\BuildAgent\work\a02b428f36957bca\src\DotNetOpenAuth\Messaging\Channel.cs:622 
    DotNetOpenAuth.Messaging.Channel.RequestCore(IDirectedProtocolMessage request) in c:\BuildAgent\work\a02b428f36957bca\src\DotNetOpenAuth\Messaging\Channel.cs:644 
    DotNetOpenAuth.Messaging.Channel.Request(IDirectedProtocolMessage requestMessage) in c:\BuildAgent\work\a02b428f36957bca\src\DotNetOpenAuth\Messaging\Channel.cs:467 
    DotNetOpenAuth.Messaging.Channel.Request(IDirectedProtocolMessage requestMessage) in c:\BuildAgent\work\a02b428f36957bca\src\DotNetOpenAuth\Messaging\Channel.cs:447 
    DotNetOpenAuth.OAuth.ConsumerBase.PrepareRequestUserAuthorization(Uri callback, IDictionary`2 requestParameters, IDictionary`2 redirectParameters, String& requestToken) in c:\BuildAgent\work\a02b428f36957bca\src\DotNetOpenAuth\OAuth\ConsumerBase.cs:221 
    TwitterConsumer.StartSignInWithTwitter(Boolean forceNewLogin) in c:\TFSWebForms\www.nanaimo.ca\Nanaimo.Ca\openID\TwitterConsumer.cs:207 
    openID_login.ibTwitter_Click(Object sender, EventArgs e) in c:\TFSWebForms\www.nanaimo.ca\Nanaimo.Ca\openID\login.aspx.cs:717 
    System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e) +116 
    System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +101 
    System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 
    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +9643314 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724 

UPDATE я использовал скрипач и обнаружил, что это dotnetopenauth не пересылает аутентификацию, когда он перенаправляется от НТТРА HTTPS.

ответ

4

Я нашел свою проблему. Твиттер, похоже, начал форсировать https, и перенаправление перестало работать. Я обновил свой потребитель Twitter, чтобы изменить его на https с http. Мой потребитель был взят из образцов.

/// <summary> 
     /// The description of Twitter's OAuth protocol URIs for use with actually reading/writing 
     /// a user's private Twitter data. 
     /// </summary> 
     public static readonly ServiceProviderDescription ServiceDescription = new ServiceProviderDescription 
     { 
      RequestTokenEndpoint = new MessageReceivingEndpoint("https://twitter.com/oauth/request_token", HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest), 
      UserAuthorizationEndpoint = new MessageReceivingEndpoint("https://twitter.com/oauth/authorize", HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest), 
      AccessTokenEndpoint = new MessageReceivingEndpoint("https://twitter.com/oauth/access_token", HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest), 
      TamperProtectionElements = new ITamperProtectionChannelBindingElement[] { new HmacSha1SigningBindingElement() }, 
     }; 

     /// <summary> 
     /// The description of Twitter's OAuth protocol URIs for use with their "Sign in with Twitter" feature. 
     /// </summary> 
     public static readonly ServiceProviderDescription SignInWithTwitterServiceDescription = new ServiceProviderDescription 
     { 
      RequestTokenEndpoint = new MessageReceivingEndpoint("https://twitter.com/oauth/request_token", HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest), 
      UserAuthorizationEndpoint = new MessageReceivingEndpoint("https://twitter.com/oauth/authenticate", HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest), 
      AccessTokenEndpoint = new MessageReceivingEndpoint("https://twitter.com/oauth/access_token", HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest), 
      TamperProtectionElements = new ITamperProtectionChannelBindingElement[] { new HmacSha1SigningBindingElement() }, 
     }; 

Semi родственный: мой старый график URL «http://twitter.com/statuses/user_timeline/14529984.xml» изменено на https://api.twitter.com/1/statuses/user_timeline/14529984.xml в какой-то момент разорвать еще одну особенность моего приложения.

+0

Я знаю, что это старо, но СПАСИБО за то, что вы подали это решение! – Rick

+0

Нет, проблема. Мне также не следует, что временные рамки больше не доступны ни по одной из ссылок из-за изменения API. – Jeff

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

  • Нет связанных вопросов^_^