2010-06-13 12 views
10

मैं सीएसएचआरपी में एक प्रमाणीकरण मॉड्यूल बनाने की कोशिश कर रहा हूं, जहां मुझे दो लीगेड ओएथ के लिए डॉटनेट ओपेनएथ (डीएनओए) लाइब्रेरी का उपयोग करके अनुरोध से हस्ताक्षर सत्यापित करने की आवश्यकता है, जिसमें केवल उपभोक्ता कुंजी और एक गुप्त है।क्या किसी ने डीएनओए का उपयोग करके 2 लीगड ओएथ लागू किया है?

यदि आपके पास डीएनओए का उपयोग करके 2 लीगड ओएथ का कोई नमूना कार्यान्वयन है जो सहायक होगा। यदि नहीं, तो कार्यान्वित करने के तरीके पर कोई भी विचार भी काम करेगा। किसी भी मदद की सराहना की जाएगी।

+0

क्या आपने कभी प्रमाणीकरण मॉड्यूल का काम किया है? मैं कुछ इसी तरह की तलाश में हूं। यहां एकमात्र उत्तर उपभोक्ता बना रहा है। – AlexGad

उत्तर

6

मैं 2-पैर वाले ओएथ के साथ काम करने के लिए डीएनओए प्राप्त करने में सक्षम नहीं था इसलिए हस्ताक्षर हस्ताक्षर को संभालने के लिए मैंने अपनी बेस क्लास के रूप में http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs का उपयोग करके अपना उपभोक्ता बना दिया। तुम सब करने की ज़रूरत है यह उपवर्ग है और हस्ताक्षर तरीकों का उपयोग http प्राधिकरण हैडर निर्माण करने के लिए ...

string sigMethodType = GetSigMethodType(); 
string ts, nonce, normalizedUrl, normalizedParams; 
string sig = GenerateSignature(new Uri("http://some-endpoint-to-call"), "GET", out nonce, out ts, out normalizedUrl, out normalizedParams); 

string header = "OAuth realm=\"" + normalizedUrl + "\"," + 
       OAuthConsumerKeyKey + "=\"" + ConsumerKey + "\"," + 
       OAuthSignatureMethodKey + "=\"" + "HMACSHA1SignatureType" + "\"," + 
       OAuthSignatureKey + "=\"" + sig + "\"," + 
       OAuthTimestampKey + "=\"" + ts + "\"," + 
       OAuthTokenKey + "=\"" + String.Empty + "\"," + 
       OAuthNonceKey + "=\"" + nonce + "\"," + 
       OAuthVersionKey + "=\"" + OAuthVersion + "\""; 

एक बार जब आप प्राधिकरण हैडर बस अपने वेब अनुरोध का निर्माण और इसे भेजने के है ...

var wr = (HttpWebRequest)HttpWebRequest.Create(messageEndpoint.Location); 
wr.Headers.Add(HttpRequestHeader.Authorization, BuildAuthHeader(messageEndpoint)); 
wr.ContentType = messageEndpoint.ContentType; 
wr.Method = CdwHttpMethods.Verbs[messageEndpoint.HttpMethod]; 
using (var resp = (HttpWebResponse)req.GetResponse()) 
{ 
    switch (resp.StatusCode) 
    { 
     case HttpStatusCode.Unauthorized: 
      Assert.Fail("OAuth authorization failed"); 
      break; 
     case HttpStatusCode.OK: 
      using (var stream = resp.GetResponseStream()) 
      { 
       using (var sr = new StreamReader(stream)) 
       { 
        var respString = sr.ReadToEnd(); 
       } 
      } 
      break; 
    } 
} 

अद्यतन: मैं devdefined के ऑथ उपभोक्ता के साथ काम करने के लिए 2-पैर प्राप्त करने में भी सक्षम था। http://code.google.com/p/devdefined-tools/wiki/OAuthConsumer

var endPoint = new Uri("http://example.com/restendpoint.svc"); 
      var ctx = new OAuthConsumerContext 
         { 
          ConsumerKey = "consumerkey1", 
          ConsumerSecret = "consumersecret1", 
          SignatureMethod = SignatureMethod.HmacSha1 
         }; 

      var session = new OAuthSession(ctx, endPoint, endPoint, endPoint); 
      var respText = session.Request().Get().ForUri(endPoint).ToString(); 

यह अच्छा होगा यदि यह एक खाली निर्माता या एक अधिभार कि सिर्फ संदर्भ में लेता था, लेकिन यह काम करने लगता है किया जाएगा।

+0

बस एक एफवाईआई - लेकिन DevDefined.OAuth ने OAuthSession रचनाकारों को अधिभारित किया है जो इन दिनों केवल उपभोक्ता संदर्भ लेते हैं, साथ ही एक्सएथ के लिए समर्थन (जैसा कि ट्विटर एपीआई आदि द्वारा उपयोग किया जाता है https://dev.twitter.com/docs/ oauth/xauth) जो इसकी 2-पैर वाली ओएथ 1.0 ए कहानी में सुधार करता है। – Bittercoder