Ciao,
visto che ogni tanto le notre applicazioni sono esposte via internet, è bene proteggerle con una password.
Però mi sono accorto che spesso le guide fanno "viaggiare" le password in chiaro, o peggio le "criptano" in base64, facendo intender che sia più sicuro.
Inutile sottolineare che non sia così. E che il nostro povero arduino NON regge la criptazione SSL, e quindi niente HTTPS.
Quindi il sistema usato è molto semplice:
Un ipotetico client si collega, eventualmente inviando un userID.
Il server gli assegna un userID (se non presente) e un codice, e li spedisce al client (in chiaro).
Attenzione, il codice non è testato.
Lo metto quì per vedere a quanti interessa, domani sera spero di riuscire a fare qualche test.
la libreria necessita anche della libreria ArduinoMD5 che potete scaricare qui GitHub - tzikis/ArduinoMD5: The first easily-embeddable MD5 library for Arduino
unsigned long code1 = auth.askToken(userID, userPSW); //userPSW è la password CORRETTA per l'utente, che arduino deve conoscere
il client concatena (attenzione all'odine, e senza i +) userID+codice+password dopo di che fà l'MD5 della stringa ottenuta e la spedisce al server, oltre che il suo userID
Il server controlla che la stringa md5 sia valida
boolean isValid = auth.check(userID, responseMd5);
ATTEZIONE: il codice NON sarà più valido
a questo punto, il server potrebbe generare un nuovo codice chiamando di nuovo askToken() (magari con un userID fittizio/random per mischiare un pò le acque) e mantenere così attiva una sessione "sicura"; anche se l'attaccante intercetta il traffico, nel peggiore dei casi sarà in grado di eseguire UNA sola chiamata spacciandosi per noi. Notare che la debollezza dell'MD5 (le collisioni) sono aggirate dalla generazione di un codice nuovo ad ogni chiamata.
Uno UserID può avere più di un token valido alla volta, e di default un token "scade" dopo 10 minuti. Per settare un valore di timeout arbotrario IN MILLISECONDI usare
AuthManager auth(10 * 1000UL); //in questo caso timeout di 10 secondi
AuthManager.cpp.zip (1.26 KB)