2013-04-13 14 views
5

私はTwitterで私の髪を裂き始め、ユーザーにサインしようとしています!!! Facebook、Google、OpenIdのすべてが正常に機能しています。ただTwitterはPAINです。DotNetOpenAuth Twitter Authenticaion Returning Unauthorized

私のコードを実行しようとすると、私は絶えず401 Unautifiedを取得しています。なぜなら、私の人生は理由を理解できません。

私はTwitterクライアントを作成しました.DotNetOpenAuthサンプルソリューションのInMemoryTokenManagerで使用しています。私の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; 
    } 
} 

であると私は正しい資格情報でInMemoryTokenManagerをインスタンス化している私のMembersControllerのコンストラクタで、次いる

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

そして、私の2つのアクション

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

私のTwitterClientののStartAuthentication()にエラーが表示されます。それは

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

私は正確な用語を覚えていませんが、Twitterのアプリケーション(コード内と同様)にコールバックURLを設定しましたか?私は最近、ローカルで開発していても、ちょうどプレースホルダーであっても、その価値を設定する必要があると信じています。

+0

私はFacebookのコードを同じように探しています。私はエラー400の悪い要求を取得し続ける – user1186651

+0

Thankkkkkkkkssssssssssssss !!!!! – benjguin

+0

ありがとう! :) –