2015-01-06 178 views
8

我開發了一個實現OAuth2.0和OData的WebApi。如何將OAuth2.0與OData客戶端代碼生成器集成?

現在我正在做一個客戶來測試我到目前爲止已經實現了什麼。我使用OData客戶端代碼生成器爲OData生成了模板,但是如何在OData請求中引入de訪問令牌?

任何想法如何擴展OData模板以引入OAuth2.0方案? 或者更簡單的方法,我如何在每個OData請求中引入OAuth訪問令牌?

UPDATE

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

你是否試圖讓Facebook的clientId和Secret? – 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'事件處理程序也可以工作。 –

相關問題