2015-01-06 216 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'事件处理程序也可以工作。 –

相关问题