2013-04-13 36 views
5

Tôi bắt đầu xé tóc ra bằng Twitter và cố gắng đăng nhập người dùng !!! Tôi có Facebook, Google, OpenId đều làm việc tốt, chỉ cần Twitter là một PAIN.DotNetOpenAuth Twitter Authenticaion Trả lại 401 Không được phép

Tôi liên tục nhận được 401 Không được ủy quyền khi tôi cố gắng chạy mã của mình và cuộc sống của tôi không thể hiểu tại sao.

Tôi đã tạo một ứng dụng khách twitter và tôi đang sử dụng nó với InMemoryTokenManager từ giải pháp mẫu DotNetOpenAuth. Twitter Khách hàng của tôi là ở đây

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

Và tôi đã sau trong constructor của MembersController của tôi mà là instantiating InMemoryTokenManager với các chứng chỉ đúng

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

Và hai Actions của tôi là

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ỗi xuất hiện trong số StartAuthentication() trong TwitterClient của tôi. Ngay sau khi nó gọi dòng này

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

tôi nhận được lỗi sau

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

Bất cứ ai cũng có lời khuyên nào? Tôi đã dành hầu hết ngày hôm qua và sáng nay cố gắng sắp xếp điều này. Tất cả các ví dụ trực tuyến tôi đã thử cũng dường như nhận được 401 trái phép trở lại? Có một vấn đề đã biết với DotNetOpenAuth và Twitter không?

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

5

Tôi không thể nhớ thuật ngữ chính xác nhưng bạn đã thiết lập URL gọi lại trong ứng dụng twitter (cũng như trong mã) chưa? Gần đây tôi đã gặp vấn đề tương tự, ngay cả khi phát triển tại địa phương, tôi tin rằng bạn cần đặt giá trị đó, ngay cả khi chỉ là một trình giữ chỗ

+0

Tôi đang tìm kiếm mã facebook, bất kỳ cơ hội nào bạn chia sẻ những gì bạn có? Tôi liên tục nhận được yêu cầu lỗi 400 yêu cầu – user1186651

+0

Thankkkkkkkkksssssssssssss !!!!! – benjguin

+0

Cảm ơn rất nhiều! :) –

Các vấn đề liên quan