OAuth è un protocollo; la versione corrente è OAuth 2.0. Più alla tua domanda, quel link elenca diverse implementazioni del protocollo in varie tecnologie. Per l'utilizzo con .NET Web API probabilmente sei interessato a DotNetOpenAuth che fornisce implementazioni di OAuth 1 e OAuth 2.
Uso DotNetOpenAuth in un'app a cui sto lavorando ora per proteggere un Web .NET. API. Ho un OAuth2Handler
che estende DelegatingHandler
che viene inserito nella pipeline dell'API Web prima che le richieste in arrivo raggiungano qualsiasi controller. OAuth2Handler
fa il seguente:
- un'istanza di un DotNetOpenAuth
ResourceServer
- chiede
ResourceServer.GetPrincipal()
che legge e decodifica l'accesso per memoria (rilasciato altrove dalla AuthorizationServer
e restituisce un OAuthPrincipal
(Nel mio caso sto leggendo dati aggiuntivi che l'implementazione DotNetOpenAuth consente di passare e creare un ClaimsPrincipal
.)
- Assegnazione dello
IPrincipal
contenente le informazioni utente lette dal token di accesso alla proprietà User del thread e il contesto HTTP corrente quindi è a disposizione dalla proprietà ApiController.User
nei controllori di servizio: httpContext.User = Thread.CurrentPrincipal = principal;
Onestamente, ottenendo tutto questo lavoro (per esempio la configurazione del server di autorizzazione, del server delle risorse, dei certificati, ecc.) non è banale. Sfortunatamente non sembra che ci sia una buona guida sul sito DotNetOpenAuth. Ecco alcuni altri compiti che dovrete davanti a voi se seguire questa strada:
- Implementare
IAuthorizationServer
- Questa è l'interfaccia fornita da DotNetOpenAuth che permette di collegare in biblioteca e utilizzare loro implementazione per rilasciare token di accesso OAuth2. Avrai anche bisogno di implementare INonceStore
e ICryptoKeyStore
che ho fatto utilizzando un contesto EntityFramework per l'archiviazione.
- Configura certificati - Il
AuthorizationServer
e ResourceServer
utilizzano ciascuno dei certificati per crittografare/decrittografare il token di accesso assicurandosi che siano accessibili l'uno con l'altro. Ho creato un po 'di custom configuration così ho potuto gestire questa configurazione nei file web.config
della mia app del server di autorizzazione e dei miei servizi API Web (server delle risorse).
- Gestisci token di aggiornamento - Quando si richiede per la prima volta un token di accesso dal server di autorizzazione, si torna indietro (a seconda della configurazione) sia un token di aggiornamento OAuth2 che un token di accesso. I servizi utilizzano il token di accesso che dovrebbe essere di breve durata. Il token di aggiornamento viene utilizzato per ottenere più token di accesso. Il token di aggiornamento dovrebbe essere tenuto segreto (qualunque cosa ciò significhi nel tuo scenario). Per me significa che il token di aggiornamento non è mai esposto a javascript sul lato client nella mia app web.
Spero che questo ti aiuti ad avere un'idea di alto livello su come iniziare con OAuth e .NET Web API. Ecco a blog post dimostrando alcuni di questi passaggi. This SO answer fornisce alcuni dettagli di alto livello sul lato client dell'immagine.
(I documenti online di DotNetOpenAuth sembrano non essere disponibili in questo momento ... scusate se non vi sono collegamenti a essi; a quanto pare ha happened before).
Ogni possibilità di condividere qualche codice sorgente. Ho giocato con questo per un paio d'ore ed è un po 'un PITA. I documenti DotNetOpenAuth non sono stati di grande aiuto in questa particolare istanza. –