2015-01-06 6 views
8

मैंने एक वेबएपी विकसित की है जो OAuth2.0 और OData लागू करता है।OData क्लाइंट कोड जेनरेटर के साथ OAuth2.0 को एकीकृत कैसे करें?

अब मैं एक क्लाइंट बना रहा हूं जो मैंने अभी तक लागू किया है। मैंने ओडाटा क्लाइंट कोड जेनरेटर का उपयोग करके ओडाटा के लिए टेम्पलेट जेनरेट किए हैं, लेकिन मैं ओडाटा अनुरोध में एक्सेस एक्सेस टोकन कैसे पेश कर सकता हूं?

ओएथ 2.0 योजना शुरू करने के लिए ओडाटा टेम्पलेट्स को विस्तारित करने का कोई विचार है? या एक और आसान तरीका, मैं प्रत्येक ओडाटा अनुरोध में OAuth एक्सेस टोकन कैसे पेश करूं?

अद्यतन

static void Main(string[] args) 
    { 
    var container = new Default.Container(new Uri(baseurl)); 

    TokenResponse accessToken = null; 
    try 
    { 
     accessToken = GetToken(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Can't do nothing without an access token..."); 
     return; 
    } 


    //I want to introduce in every request the following information: 
    //Basic autentication header with cliendId + clientSecret 
    //Access token 

    //How do I introduce them before making the call on the OData service? 
    foreach (var s in container.ServiceSessions) 
    { 
     string format = "; 
     Console.WriteLine("PKID:{0}", s.PKID); 
    } 
} 
+0

कृपया कुछ कोड जोड़ सकते हैं और अंत परिणाम आप चाहते हैं के बारे में विशिष्ट हो। Abc.com पर कुछ उपयोगकर्ता लॉगिन करना चाहते हैं। या उपयोगकर्ता की सार्वजनिक रूप से साझा जानकारी चाहते हैं। – Ammar

+0

मैंने एक साधारण नमूना कोड और जो मैं प्राप्त करना चाहता हूं उसके बारे में अधिक जानकारी प्रस्तुत की है। क्या अब यह और स्पष्ट है? –

+0

क्या आप फेसबुक से क्लाइंट आईडी और सीक्रेट रखने की कोशिश कर रहे हैं? – Ammar

उत्तर

14

के बाद अनुसंधान के एक बिट मैं समाधान मिल गया है:

var container = new Default.Container(new Uri(http://localhost:9000/)); 

//Registering the handle to the BuildingRequest event. 
container.BuildingRequest += (sender, e) => OnBuildingRequest(sender, e, accessToken); 


//Every time a OData request is build it adds an Authorization Header with the acesstoken 
private static void OnBuildingRequest(object sender, BuildingRequestEventArgs e, TokenResponse token) 
    { 
    e.Headers.Add("Authorization", "Bearer " + token.AccessToken); 
    } 
3

आप एक HTTP अनुरोध हेडर के रूप में पहुँच टोकन जोड़ना चाहते हैं, तो निम्न नमूना मदद करनी चाहिए:

var context = new DefaultContainer(new Uri("http://host/service/")); 
context.SendingRequest2 += (s, e) => e.RequestMessage.SetHeader("headerName", "headerValue"); 

भेजा हर अनुरोध के बाद आप इस निर्दिष्ट किया है कोड में यह हेडर शामिल होगा।

+0

मैं यिंग डिंग की मदद के लिए धन्यवाद, मुझे एक समान समाधान मिला है। अनुरोध भेजने से पहले हेडर जोड़ने के बजाय, अनुरोध तैयार होने पर मैंने प्रमाणीकरण शीर्षलेख जोड़ा था। –

+0

@ JoãoAntunes आप सही हैं। 'BuildingRequest' ईवेंट हैंडलर भी काम करते हैं। –

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