2013-10-21 22 views
13

Ho giocato con le nuove funzionalità di autenticazione in ASP.NET MVC 5 (in precedenza ho utilizzato DotNetOpenAuth).OpenID "generico" in ASP.NET MVC 5

Comprendo che il provider Google incorporato utilizza OpenID [1] (e funziona correttamente), ma durante l'autenticazione desidero utilizzare il mio provider OpenID.

Purtroppo, non ero in grado di trovare un modo semplice per ottenere questo risultato con le caratteristiche out-of-the-box di ASP.NET MVC 5. Ho guardato attraverso la fonte di Microsoft.Owin.Security.Google e sulla base di questo sembra del tutto possibile aggiungere un nuovo provider OpenID.

Esiste un modo più semplice (forse già integrato) per aggiungere un nuovo provider OpenID a un'applicazione ASP.NET MVC 5? O devo scrivere uno da zero (un nuovo middleware Owin)?

[1] http://www.asp.net/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on
[2] http://www.symbolsource.org/MyGet/Metadata/aspnetwebstacknightly/Project/Microsoft.Owin.Security.Google/2.0.1-rtw1-20924-641-dev/Release/.NETFramework,Version=v4.5/Microsoft.Owin.Security.Google

risposta

5

Sono nella stessa situazione e credo che la risposta è "no".

La classe chiave è Microsoft.Owin.Security.Google.GoogleAuthenticationHandler che implementa il gestore backend OWIN. È difficile codificare la chiamata a https://www.google.com/accounts/o8/ud nel suo AuthenticateCoreAsync così come la codifica hard della richiesta Attributo eXchange in ApplyResponseChallengeAsync. Se ci fosse un modo migliore (cioè una classe di base OpenID), presumo che sicuramente lo avrebbero usato invece di codificare in modo rigido questi due punti. Suppongo che Microsoft non l'abbia reso generico a causa di motivi di pianificazione o di mancanza percepita della domanda.

Penso che un middleware OpenID OWIN generico open source sarebbe un ottimo pacchetto NuGet.

+0

Grazie. Immagino che rimarrò pigro e rimanga con DotNetOpenAuth per le prossime settimane, forse qualcuno costruisce un middleware OpenId fino ad allora;) –

+0

Ho avuto successo nel far funzionare il codice Google per Yahoo cambiando https://www.google. com/accounts/o8/ud a https://open.login.yahooapis.com/openid/op/auth. Ho ottenuto lo stesso identificativo dichiarato che DotNetOpenAuth stava dando per quell'account, quindi sembra che il codice si generalizzi bene. Penso che l'unico bit impegnativo sarebbe la generalizzazione del processo Attribute eXchange a seconda di ciò che il provider darà come fa DNOO. –