2015-01-06 9 views
8

Ho sviluppato un WebApi che implementa OAuth2.0 e OData.Come integrare OAuth2.0 con OData Client Code Generator?

Ora sto facendo un client per testare ciò che ho implementato finora. Ho generato i modelli per OData usando il generatore di codice client OData, ma come posso introdurre il token di accesso nella richiesta OData?

Qualche idea su come estendere i modelli OData per introdurre lo schema OAuth2.0? O in un modo più semplice, come posso introdurre il token di accesso OAuth in ogni richiesta 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

Si prega di aggiungere un po' di codice e essere specifico circa la fine risultati desiderati. Mi piace voler accedere ad un utente su abc.com. O vuoi avere le informazioni condivise pubblicamente dell'utente. – Ammar

+0

Ho introdotto un semplice codice di esempio e ulteriori informazioni su ciò che voglio ottenere. È più chiaro ora? –

+0

Stai cercando di avere clientId e segreto da Facebook? – Ammar

risposta

14

Dopo un po 'di ricerca ho trovato la soluzione:

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

Se vuoi aggiungere il token di accesso come intestazione di richiesta HTTP, il seguente esempio dovrebbe aiutare:

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

Ogni richiesta inviata dopo aver specificato questo il codice includerà questa intestazione.

+0

Ti ringrazio per l'aiuto Yi Ding, ho trovato una soluzione simile. Invece di aggiungere l'intestazione prima di inviare la richiesta, avevo aggiunto l'intestazione di autenticazione quando la richiesta è stata compilata. –

+0

@ JoãoAntunes Hai ragione. Funzionano anche i gestori di eventi 'BuildingRequest'. –