Desidero condividere un'implementazione di autenticazione su un'applicazione web e un'API web. L'applicazione Web sarà ASP.NET (principalmente MVC 4), l'API sarà principalmente API Web ASP.NET, anche se prevedo che avrà anche alcuni moduli o gestori personalizzati.
Voglio:
- Condividi l'implementazione dell'autenticazione tra l'app e l'API il più possibile.
- Fai in modo che l'applicazione Web si comporti come l'autenticazione dei moduli (pagina di accesso attraente, opzione di disconnessione, reindirizzamento a / dalla pagina di accesso quando una richiesta richiede autenticazione / autorizzazione).
- I chiamanti API utilizzano qualcosa di simile a HTTP standard (401 - Non autorizzato, non 302 - Reindirizzamento).
- Fornisci meccanismi di disconnessione lato client e server che non richiedono una modifica della password (quindi HTTP basic è out, poiché i client in genere memorizzano le loro credenziali).
Il modo in cui sto pensando di implementarlo consiste nell'usare l'autenticazione semplice dei moduli ASP.NET per l'applicazione Web e nello spingere un altro modulo nello stack (molto simile a MADAM - Modulo ASP.NET per l'Autenticazione Mista ). Questo modulo cercherà un header HTTP (specifico per l'implementazione) che indichi "caller is API".
Se l'intestazione "chiamante è API" è impostata, il servizio risponderà in modo diverso rispetto all'autenticazione dei moduli ASP.NET standard, sarà:
- 401 anziché 302 su una richiesta priva dell'autenticazione.
- Cerca nome utente + passa in un'intestazione HTTP "Login" personalizzata e restituisci un ticket FormsAuthentication in un'intestazione "FormsAuth" personalizzata.
- Cerca il ticket FormsAuthentication in un'intestazione "FormsAuth" personalizzata.
Le mie domande sono:
- Esiste un framework per ASP.NET che copre già questo scenario?
- Ci sono dei buchi evidenti in questa implementazione proposta? La mia paura primaria è un rischio per la sicurezza che non riesco a vedere, ma sono altrettanto preoccupato che possa esserci qualcosa in merito a tale implementazione che renderà eccessivamente restrittive o goffe con cui lavorare.