2011-02-11 10 views
5

के माध्यम से FreshBooks के प्रमाणीकरण मैं अपने ASP.NET MVC C# ऐप से FreshBooks API के प्रमाणीकरण के लिए OAuth का उपयोग करने का प्रयास कर रहा हूं। यहाँ मैं अब तक है:DotNetOpenAuth

मैं DotNetOpenAuth यहाँ का उपयोग कर रहा है कोड मैं अपने नियंत्रक कार्रवाई में है

if (TokenManager != null) 
{ 
    ServiceProviderDescription provider = new ServiceProviderDescription(); 
    provider.ProtocolVersion = ProtocolVersion.V10a; 
    provider.AccessTokenEndpoint = new MessageReceivingEndpoint  ("https://myfbid.freshbooks.com/oauth/oauth_access.php", DotNetOpenAuth.Messaging.HttpDeliveryMethods.PostRequest); 
    provider.RequestTokenEndpoint = new DotNetOpenAuth.Messaging.MessageReceivingEndpoint("https://myfbid.freshbooks.com/oauth/oauth_request.php", DotNetOpenAuth.Messaging.HttpDeliveryMethods.PostRequest); 
    provider.UserAuthorizationEndpoint = new DotNetOpenAuth.Messaging.MessageReceivingEndpoint("https://myfbid.freshbooks.com/oauth/oauth_authorize.php", DotNetOpenAuth.Messaging.HttpDeliveryMethods.GetRequest); 
    provider.TamperProtectionElements = new ITamperProtectionChannelBindingElement[] { new HmacSha1SigningBindingElement() }; 

    var consumer = new WebConsumer(provider, TokenManager); 

    var response = consumer.ProcessUserAuthorization(); 
    if (response != null) 
    { 
     this.AccessToken = response.AccessToken; 
    } 
    else 
    { 
     // we need to request authorization 
     consumer.Channel.Send(consumer.PrepareRequestUserAuthorization(
      new Uri("http://localhost:9876/home/testoauth/"), null, null)); 
    } 
} 

TokenManager, एक ही कक्षा कि DotNetOpenAuth नमूने के साथ प्रदान की जाती है मैं मैंने अपने उपभोक्ता रहस्य को सेट किया है कि फ्रेशबुक ने मुझे दिया है।

"The remote server returned an error: (400) Bad Request.".

Am मैं सही ढंग से यह कर:

consumer.Channel.Send(consumer.PrepareRequestUserAuthorization(...)) पर मैं निम्नलिखित अपवाद मिल गया है? FreshBooks प्रलेखन और DotNetOpenAuth नमूने के आधार पर जो सही तरीके से काम करना चाहिए।

क्या ओएथ के साथ प्रमाणित करने का कोई आसान तरीका है, क्योंकि DotNetOpenAuth OAuth प्रमाणीकरण का उपयोग करने के लिए थोड़ा बड़ा है?

उत्तर

5

विशिष्ट कुंजी प्रदाता की स्थापना आदि नमूना आवेदन में और निश्चित रूप से प्रदाताओं में से एक के लिए यूआरएल को बदलने का एक साधारण बात नहीं होना चाहिए आप DotNetOpenAuth उपयोग करना चाहते हैं तो आप यह सुनिश्चित करें कि बनाने की जरूरत है:

  • आप का उपयोग हस्ताक्षर विधि "सादा पाठ"
  • और TamperProtect रूप PlaintextSigningBindingElement का उपयोग ionElements

कुछ इस तरह मेरे लिए काम करता है:

public static readonly ServiceProviderDescription ServiceDescription = new ServiceProviderDescription 
{ 
    ProtocolVersion = ProtocolVersion.V10a, 
    RequestTokenEndpoint = new MessageReceivingEndpoint(oAuthBase + "/oauth_request.php", HttpDeliveryMethods.PostRequest), 
    UserAuthorizationEndpoint = new MessageReceivingEndpoint(oAuthBase + "/oauth_authorize.php", HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest), 
    AccessTokenEndpoint = new MessageReceivingEndpoint(oAuthBase + "/oauth_access.php", HttpDeliveryMethods.PostRequest | HttpDeliveryMethods.AuthorizationHeaderRequest), 
    TamperProtectionElements = new ITamperProtectionChannelBindingElement[] { new PlaintextSigningBindingElement() } 
}; 

public static void RequestAuthorization(WebConsumer consumer) 
{ 
    if (consumer == null) 
    { 
     throw new ArgumentNullException("consumer"); 
    } 

    var extraParameters = new Dictionary<string, string> { 
     { "oauth_signature_method", "PLAINTEXT" }, 
    }; 
    Uri callback = Util.GetCallbackUrlFromContext(); 
    var request = consumer.PrepareRequestUserAuthorization(callback, extraParameters, null); 
    consumer.Channel.Send(request); 
} 
1

आप मेरे ओपन सोर्स ओथ लाइब्रेरी का उपयोग करने का प्रयास कर सकते हैं। उपयोग करना और जाने जाना बेहद आसान है। मेरे पास एक नमूना प्रोजेक्ट है जो डाउनलोड में उपलब्ध है जो Google, ट्विटर, याहू और वीमियो से जुड़ता है। मैंने जानबूझकर कोड को बहुत सरल रखा है, इसलिए समझना आसान है।

OAuth C# Library

मैं FreshBooks उपयोग नहीं किया है, लेकिन यह

+0

साझा करने के लिए धन्यवाद, मैं मानता अपने पुस्तकालय, उपयोग करने के लिए सरल है, हालांकि मैं एक ही 400 गलत अनुरोध त्रुटि मिल गया है, मैं शुरू कर रहा हूँ यह सोचने के लिए कि मैं फ्रेशबुक से संबंधित हूं और मेरा कार्यान्वयन नहीं करता हूं। मैं उनके साथ सीधे जांच करूंगा। –

संबंधित मुद्दे