Ho appena creato Webkey negli ultimi due giorni. È costruito per eseguire un'autenticazione del certificato client senza utilizzare la funzionalità client-cert (a mio parere inutilizzabile) incorporata nei browser. Permetterebbe l'autenticazione a password singola proprio come fa una chiave ssh, ma per il web.
La password dell'utente non viene mai inviata su Internet (anche in forma crittografata). Questa utility può essere ospitata interamente staticamente (ed è attualmente ospitata sul link ).
L'applicazione richiedente carica webkey in un iframe su https. Su richiesta dell'autore, se l'utente non ha creato una coppia di chiavi RSA, webkey lo fa nell'iframe e lo salva nella memoria locale (crittografato con aes utilizzando una password creata dall'utente). L'utente salva anche un'e-mail da utilizzare come loro ID.
Ecco le fasi auth in maggior dettaglio dal punto di vista dell'applicazione che richiede l'autenticazione:
- Sul client, richiedere l'accettazione dell'utente (comando requestAcceptance) e inviare l'email risultante e la chiave pubblica al server
- Sul server , se quell'e-mail non è già presente nel sistema con quella chiave pubblica, invia loro un'email di verifica (se lo desideri) e, una volta verificata, associa l'e-mail e la chiave pubblica al tuo database e andare al passaggio 7 se tale e-mail è nel sistema con quella chiave pubblica, continua con il passaggio 3
- Sul server , genera un token di caratteri da 3 a 20 (in formato stringa) e invialo al client
- Sul client, invia il token nell'iframe di webkey utilizzando il comando 'auth' postMessage
- Sul client, ricevi il token firmato (chiamato proof) da webkey e invia quella prova al server.
- Sul server , verifica che il token con la chiave pubblica specificata (il server debba ancora avere il token originale) NON fidarti di alcun token inviati al server dal client)
- profitto! Il tuo utente è ora autenticato!
Ciò che sto facendo qui è teoricamente sicuro? Quali sono i potenziali problemi con come funziona?