Penso che i token sarebbero una buona strada da percorrere. L'autenticazione basata su form si basa sui cookie per il web. Non è la situazione più idea per tutti i client non browser.
Quello che suggerirei è la creazione di un custom AuthorizationFilterAttribute e l'override del metodo OnAuthorization. In tale metodo, è possibile verificare l'esistenza di un token che è stato rilasciato al client dopo aver fornito credenziali valide. È possibile utilizzare questo attributo su qualsiasi metodo o controller che si desidera convalidare. Ecco un esempio si potrebbe riferimento
public class AuthorizeTokenAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext != null)
{
if (!AuthorizeRequest(actionContext.ControllerContext.Request))
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized) { RequestMessage = actionContext.ControllerContext.Request };
}
return;
}
}
private bool AuthorizeRequest(System.Net.Http.HttpRequestMessage request)
{
bool authorized = false;
if (request.Headers.Contains(Constants.TOKEN_HEADER))
{
var tokenValue = request.Headers.GetValues("TOKEN_HEADER");
if (tokenValue.Count() == 1) {
var value = tokenValue.FirstOrDefault();
//Token validation logic here
//set authorized variable accordingly
}
}
return authorized;
} }
TOKEN_HEADER è solo una stringa che rappresenta un header HTTP che il client deve passare di nuovo per le richieste autenticate.
Quindi cerchiamo di camminare attraverso di essa
- richieste dei client dati sicuri
- Cliente non è autorizzato, restituire una risposta con un codice di stato non autorizzato
- client invia le credenziali per l'autenticazione, che dovrebbe essere assicurato tramite HTTPS
- Una volta convalidato, il client riceve un token tramite un'intestazione HTTP, o qualsiasi cosa funzioni per voi
- Il client tenta di richiedere nuovamente i dati protetti, questa volta in allegato token alla richiesta
- AuthorizeTokenAttribute convaliderà il token e consentirà l'esecuzione dell'azione.
Inoltre, controlla questo post di John Petersen. Making your ASP.NET Web API’s secure
Grazie, questo ha aiutato molto, come si consiglia di generare il token durante l'autenticazione? generare un guid e memorizzarlo per l'utente nel database? –
che spetta a voi, suppongo. Puoi utilizzare un Guid o un hash o qualche tipo di valore univoco. dipende da cosa ha davvero senso la tua applicazione – cecilphillip
nel tuo commento di codice che dici "imposta la variabile autorizzata di conseguenza" .... dove impostare la variabile autorizzata? sulla Request.Properties? Altrove? – ChrisCa