2015-01-06 15 views
8

Opracowałem aplikację WebApi, która implementuje OAuth2.0 i OData.Jak zintegrować OAuth2.0 z kodem klienta OData?

Teraz robię klienta, aby przetestować to, co zaimplementowałem do tej pory. Wygenerowałem szablony dla OData przy użyciu Generatora kodów klienta OData, ale jak mogę wprowadzić token dostępu de w żądaniu OData?

Każdy pomysł jak rozszerzyć szablony OData, aby wprowadzić schemat OAuth2.0? A może prostszy sposób, w jaki sposób wprowadzić token dostępu OAuth w każdym żądaniu OData?

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

proszę dodać trochę kodu i dokładnie o końcowych wynikach chcesz. Jak chcesz zalogować się do jakiegoś użytkownika na abc.com. Lub chcesz mieć publicznie udostępniane informacje o użytkowniku. – Ammar

+0

Wprowadziłem prosty przykładowy kod i więcej informacji o tym, co chcę osiągnąć. Czy teraz jest bardziej przejrzysty? –

+0

Czy próbujesz mieć clientId i Secret z Facebooka? – Ammar

Odpowiedz

14

Po nieco badań znalazłem rozwiązanie:

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

Jeśli chcesz dodać token dostępu jako nagłówka żądania HTTP, następujące próbki powinny pomóc:

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

każde żądanie wysłane po tym, jak ten określony kod będzie zawierał ten nagłówek.

+0

Dziękuję za pomoc Yi Ding, znalazłem podobne rozwiązanie. Zamiast dodawać nagłówek przed wysłaniem żądania, dodałem nagłówek uwierzytelniania, gdy żądanie jest budowane. –

+0

@ JoãoAntunes Masz rację. Działają również programy obsługi zdarzeń 'BuildingRequest'. –

Powiązane problemy