Ciao,
ok, ci sono vari approcci che puoi usare. Alcuni più semplici, altri più sicuri che ti mettono relativamente al riparo da attacchi di tipo replay. Vediamone qualcuno tra i più comuni, poi scegli quello che pensi faccia al caso tuo.
- Basic authentication. L'utente inserisce le sue credeziali nel modulo di login e, da quel momento in poi, ogni volta che l'app invia una richiesta al server, includerà il suo username e password tra le intestazioni, in chiaro. Questo approccio è sicuro se le comunicazioni avvengono su HTTPS, ovvero devi installare un certificato SSL nel server. Può essere soggetto ad attachi di tipo replay.
- Token. Simile al precedente ma, anziché inviare sempre username e password ad ogni richiesta, invia un token che ha durata limitata nel tempo. Il token era stato ottenuto dal client dopo aver fornito lo username e la password al server ad un endpoint di login. Anche questo è soggetto ad attacchi di tipo replay.
- Http digest Il client invia una richiesta al server, che gli risponde con un errore 401 Unauthorized. Nella stessa risposta, invia anche il realm e un nonce, ovvero un codice monouso che il client dovrà usare nella sua prossima richiesta. A questo punto il client usa lo username, la password, il realm e il nonce per crearsi un hash che include in una nuova richiesta immediata. Il server, anch'esso in possesso di username e password, è in grando di ricalcolarsi l'hash e verificare che sia corretto. Se lo è, autorizza il client. Questo meccanismo di permette di non far viaggiare username e password con la richiesta e di impedire attacchi di tipo replay, dato che il nonce per definizione è usabile solo una volta. Non è necessario comunicare su HTTPS ma è sempre meglio farlo per proteggere le informazioni che gli utenti caricano nella propria area riservata.
- Hawk. Simile al precedente ma il nonce è generato dal client che nella sua richiesta include anche un timestamp, in modo che il server possa verificare che la richiesta è fresca. Anch'esso quindi è relativamente protetto da attacchi di tipo replay. C'è un'implementazione per ASP.NET WebAPI qui.
https://github.com/pcibraro/hawknet
Scegli tu quello che ti sembra più appropriato, tenendo anche in considerazione il tempo di sviluppo che è richiesto per integrare il meccanismo scelto con la tua applicazione.
ciao,
Moreno
Modificato da BrightSoul il 07 dicembre 2015 16.07 -