2012-02-02 15 views
11

Sto costruendo un'app Web di Google App Engine, con un back-end Java, che fa molto affidamento su JavaScript/JQuery nel browser (è possibile vederlo here).Qual è il modo più semplice e sicuro per autenticare gli utenti tramite AJAX?

Desidero implementare un meccanismo di autenticazione utente, che si baserà anche su AJAX (ad esempio, sarà in grado di registrarsi e accedere senza un aggiornamento della pagina).

Non voglio fare affidamento sull'autenticazione di Google perché ho scoperto che molte persone sono riluttanti a rinunciare ai loro indirizzi email GMail, ma mi piacerebbe supportare l'autenticazione via Google/Facebook/Twitter ecc. In futuro .

Mi piace la semplicità dell'approccio di Reddit all'autenticazione dell'utente.

La mia preoccupazione è che, dal momento che le persone non utilizzeranno la mia app su HTTPS, non voglio dover inviare una password in chiaro su HTTP. Preferirei anche fare affidamento su qualche tipo di token segreto (forse un hash della password e qualche "sale" fornito dal server), che potrebbe essere intercettato e falsificato.

Allo stesso tempo, non voglio dover fare un grande sforzo per implementare il meccanismo di autenticazione.

C'è un approccio che mi dà la semplicità che voglio, eppure è sicuro su HTTP?

modifica: Ho appena realizzato che Google App Engine supporta HTTPS ma solo se ci si connette tramite l'URL * .appspot.com per il proprio sito. Sfortunatamente non è possibile effettuare chiamate AJAX a causa di restrizioni di scripting cross-site, anche se immagino che possa essere possibile con JSONP.

Quindi, sta utilizzando JSONP + HTTPS + *. Appspot.com l'approccio migliore qui?

risposta

4

È necessario utilizzare https per comunicazioni sicure tramite http. Non c'è modo di fare comunicazioni sicure da un browser senza di esso.

Se si utilizza JSONP + https nel dominio appspot, gli utenti non vedranno che il sito è protetto e non sarà possibile salvare i cookie in modo sicuro. Per noi, l'unica soluzione era esporre il brutto dominio appspot.com direttamente ai nostri clienti. Google dice da tempo che SSL sui domini personalizzati sta arrivando, ma non c'è una data.

Modifica per PS: se non è necessario che i clienti visualizzino un https verde e non è necessario salvare i cookie in modo sicuro (forse invece una chiave di sessione protetta dall'oscurità?), Jsonp + https per * .appspot.com suona come una soluzione intelligente che funzionerebbe.

+0

Grazie per la risposta, ma temo che l'esposizione del dominio appspot.com non sia un'opzione, è semplicemente troppo brutta. Non mi interessa molto se gli utenti vedono che il sito è sicuro. Ad esempio, Reddit invia informazioni di accesso tramite HTTPS ma l'utente non lo vede. Non penso ci sia alcuna prova che l'adozione di Reddit sia stata limitata dalla mancanza di un uso * visibile * di HTTPS. – sanity

+0

Oh, non sono sicuro di poter essere d'accordo sul fatto che tu * devi * usare HTTPS per comunicazioni sicure via HTTP, dato che potresti sempre eseguire la crittografia manualmente in JavaScript e sul server. Naturalmente, sei ancora vulnerabile al MITM con il download iniziale del codice JavaScript, ma sono più preoccupato per Eve che per Mallory. – sanity

+0

Se non si desidera che visualizzino l'https e non sia necessario salvare cookie protetti, jsonp + https per appspot.com dovrebbe funzionare correttamente. Forse potresti implementare la tua ssl con javascript, ma hai detto che vuoi evitare di reinventare la ruota. E ... perché preoccuparsi, se sarà comunque vulnerabile al MITM? Se a qualcuno importa abbastanza da origliare, a qualcuno interesserà abbastanza per creare un MITM. –

0

È davvero una buona domanda e ha davvero bisogno di una conoscenza approfondita della crittografia .. Questo è un articolo che ho trovato interessante un paio di mesi fa .. Hanno una soluzione proposta utilizzando CRAM-MD5 un'autenticazione challenge-response. Spero che questo possa essere utile.

http://en.wikipedia.org/wiki/CRAM-MD5

http://blog.stochastictechnologies.com/secure-authentication-over-http

saluti.

+1

Grazie, per fortuna ho una conoscenza abbastanza decente di crypto (Applied Cryptography è uno dei miei libri preferiti;), ma sicuramente non dovresti reinventare la ruota solo per ottenere l'autenticazione sicura? – sanity

+0

:) Ma non ho trovato alcuna solida implementazione di questo approccio. la maggior parte delle volte preferiamo usare https su http quando abbiamo bisogno dell'autenticazione .. –

+0

Sì, sono propenso a JSONP su HTTPS – sanity

Problemi correlati