ciao,
red ha scritto:
appena digito l'indirizzo che dovrebbe richiedere le credenziali , il 401
Ah ok, manca la
challenge.
Nel metodo Application_AuthenticateRequest aggiungi un else al tuo blocco if. Dobbiamo gestire la situazione in cui la header Authorization non sia stata fornita.
if (authHeader != null) {
//il codice che hai scritto qui dentro va bene
} else {
//aggiungo l'else
//se la authHeader era null, mando questa instestazione al client
//grazie ad essa, il browser ti mostrerà la finestra di login
HttpContext.Current.Response.Headers.Add("WWW-Authenticate", "Basic");
//e magari imposto pure il codice 401
throw new HttpException(401, "Unauthorized");
}
Comunque, se devi fare dei test non usare il browser perché sarà difficile testare i verbi POST, DELETE e gli altri.
Puoi usare
fiddler oppure
Postman, che è ideale per questo scopo.
Poi ci sarebbero altre cose di cui parlare...
red ha scritto:
Comunque è un progetto rest
Ok, sappi che se volessi abilitare l'autenticazione solo per gli ApiController e non per gli altri eventuali Controllers che hai nel progetto, l'Application_AuthenticateRequest non andrà bene perché va in esecuzione ad
ogni richiesta. Dunque potresti spostare la logica della Basic Authentication in un DelegateHandler, che si può abilitare selettivamente solo per la route di WebApi. Vedi il paragrafo "Per-Route Message Handlers".
http://www.asp.net/web-api/overview/working-with-http/http-message-handlersE qui vedi un esempio di Marco De Sanctis.
http://www.aspitalia.com/script/1134/Proteggere-Chiave-Servizio-ASP.NET-Web-API.aspxred ha scritto:
con la forms authentication ho trovato non pochi problemi tramite app!
Già. Se scegli di usare la Basic authentication, ricordati che dovrai quasi obbligatoriamente far viaggiare i dati su HTTPS perché la password viaggia in chiaro, attenzione.
Un modo simile alla Basic Authentication, ma che non espone la password, è l'autenticazione Digest.
http://it.wikipedia.org/wiki/Digest_access_authenticationIn alternativa, anziché stare ad implementare tutto, valuta i Mobile Services di Microsoft Azure. Sono il backend ideale per le mobile apps.
Hai esempi d'uso e autenticazione anche per iOs, Android e varie altre piattaforme.
http://www.windowsazure.com/en-us/documentation/articles/mobile-services-ios-get-started-users/ciao,
Moreno
Modificato da BrightSoul il 01 aprile 2014 23.11 -