2013-04-02 1 views
13

Sto creando una domanda di un cliente che ha bisogno di fare quanto segue:Come devo implementare OAuth per un'applicazione?

  • consentire agli utenti di autenticarsi utilizzando Google, Facebook, Twitter e LinkedIn.
  • Consente agli utenti di aggiungere altri provider dopo essersi registrati. (cioè se l'utente autenticato con Google dovrebbe essere in grado di aggiungere uno o tutti gli altri provider.)
  • Consentire agli utenti di importare i contatti Google, l'elenco di amici di Facebook, i follower di Twitter e gli amici di Linkedin per costruire una lista di contatti personalizzati.

Dove è il posto migliore per iniziare a conoscere questo? C'è uno standard che tutti usano per queste cose in .NET? Sono stato su Google per un paio d'ore e mentre sembra che la maggior parte delle persone punti a DotNetOpenAuth Non riesco a trovare alcun tutorial solido su come utilizzare la libreria. Il download viene fornito con i campioni ma mi confonde ancora.

ho pensato che sarebbe stato più semplice: i segreti

  • configurare i provider.
  • Iniziare login con il fornitore
  • utente autenticazione con autenticazione biscotto
  • Creare record utente nel mio database e memorizzare ID univoco dal fornitore.

Ma sembra che ogni provider abbia il proprio set di codice ed è tutto così diverso e confuso. Facebook ha qualche oggetto grafico, Twitter ha alcuni "InMemoryTokenManager" che non capisco, e Google non ha nemmeno un esempio di autenticazione, solo un esempio di Google Address Book. E per di più devi copiare bit di codice da una demo di ApplicationBlock negli esempi nella tua app per qualche motivo, e ottenere tutto ciò per compilare senza sapere cosa diavolo sta cercando di fare è un compito arduo.

Mi sento come se mi mancasse qualcosa di fondamentale in tutto questo.

Anche una raccomandazione di un libro sarebbe grandiosa a questo punto.

Credo di capire i concetti di alto livello di OAuth ma una volta che provo a immergermi nel nitty-gritty mi sono subito perso.

+0

Vedere questo vedieo: http://www.slideshare.net/leahculver/implementing-oauth –

+0

Sfortunatamente, la variazione nel grado di implementazione di ciascuna API di social network varierà. Tuttavia, molti di loro usano un modulo di O'Auth con un token per connettersi effettivamente. – Greg

+2

Vorrei solo che ci fossero alcuni semplici tutorial per DotNetOpenAuth. Ogni domanda SO che richiede tale documentazione viene inevitabilmente informata di "scaricare gli esempi, è tutto ciò che serve". Per le persone apparentemente stupide come me, i campioni non sono "tutto ciò che serve". – Chev

risposta

6

In primo luogo, non vi è davvero alcun punto nell'utilizzo di librerie esterne se si è su rete 4.5 dove il modello asp.net predefinito viene fornito con il codice di autenticazione per la maggior parte di questi provider menzionati.

secondo luogo, se hai ancora bisogno di un buon tutorial su alcuni dettagli di autenticazione OAuth2, dare un'occhiata a questo grande post di Ben Foster http://ben.onfabrik.com/posts/oauth-providers

In terzo luogo, purtroppo, se avete bisogno di altro che authentiation, non c'è singolo protocollo. Pertanto, ogni fornitore ha il proprio modo di esporre questi dati aggiuntivi - contatti, post ecc. Non si può fare molto su di esso, non ha nulla a che fare con oauth2 ma è solo un modo di invocare una specifica api che per caso è spesso esposti come servizi web di rest/xml in base all'autenticazione oauth2. Ciò significa che se si esegue solo l'autenticazione, il protocollo è per lo più lo stesso per ciascun provider. Qualcosa di più è specifico.

In quarto luogo, rimango con l'indirizzo di posta elettronica restituito da un provider anziché dall'ID interno. Non tutti i provider supportano l'id, mentre tutti possono restituire l'email dell'utente. E puoi fidarti di queste informazioni quando i provider verificano le e-mail prima di restituirle tramite oauth2.

+0

Twitter sembra non restituire la posta elettronica e non sembra esserci un'opzione per chiederlo anche all'utente. – Chev

+0

@AlexFord: grazie per questo commento. Faccio sempre oauth2 su google/facebook/live e la mancanza di e-mail da Twitter è qualcosa di nuovo per me. Considera la mia ultima osservazione invalida, ma altri sostengono. –

2

Ti suggerisco di utilizzare World Domination da PureKrome, è banale da usare, ben documentato e molto bello!

https://github.com/PureKrome/WorldDomination.Web.Authentication

Gestisce Twitter, Google, Facebook ed altri con semplici configurazioni di una linea, e gestisce tutto il resto.

Anche il creatore gira intorno a n jabbr.net.

+1

Hahaha Amo il README. Questo mi aiuterà a fare qualcosa di più della semplice autenticazione? Ho bisogno di afferrare amici/contatti degli utenti anche ad un certo punto. – Chev

+0

No, non lo farà - afaik questo non ha nulla a che fare con OAuth, che sarebbe su misura per ogni servizio da cui vuoi prendere quei dati. – Moo

+1

Btw, mi ci sono voluti 5 minuti per collegare WD a un'applicazione esistente :) è sufficiente memorizzare il token in una tabella collegata all'account utente (memorizzo il nome del fornitore, il token e quindi il grezzo restituito dal provider, non si sa mai quando potrebbe essere necessario ...) e impostare manualmente il cookie token Auth asp.net. – Moo

1

Il modello ASP.NET MVC 4 'Internet Application' ha DotNetOpenAuth implementato su di esso, dovresti dare un'occhiata a questo se non lo hai già fatto.

+0

Sì, l'ho visto. Non riesco a trovare alcun esempio senza una stretta integrazione con il provider di appartenenze e ruoli predefinito. Questa applicazione non lo usa. Fa 'FormsAuthentication.SetAuthCookie (userId)' e quindi usa 'User.Identity.Name' per poi accedere a' userId'. Dopo questo è tutto il modello di dati personalizzato. – Chev

+0

Quindi probabilmente dovrai controllare la tua implementazione di 'SimpleMembershipProvider'. –

+0

Figurati tanto. Ho davvero cercato di evitarlo, ma se non c'è altro modo. La funzionalità integrata è estendibile? Posso aggiungere LinkedIn nel mix? – Chev

0

Dai uno sguardo al progetto Social Bootstrap API (utilizza il servicestack, ma è bello vedere tutte queste tecnologie buzzword che lavorano insieme in un campione leggibile).

Inoltre, se si desidera ottenere una migliore gestione di come funziona OAuth, Mashape has good explanation. Questo ti darà un'occhiata alle cose dietro le quinte che la maggior parte dei wrapper implementa.

Rick Strahl has an example che ho usato anni fa per implementare OpenID in MVC. È un po 'datato ma è stata una delle implementazioni più dirette al momento. Diversi siti di clienti che ho creato con questa implementazione funzionano ancora bene.