Autenticazione a due fattori con Duo-Security

Nel mio ultimo articolo sull'autenticazione a due fattori, ho creato uno screencast che illustrava come utilizzare il sistema di autenticazione Authy a due fattori per migliorare facilmente la sicurezza di accesso del tuo sito web. Questa volta, esamineremo un altro servizio di Duo Security che offre una solida API di sicurezza, guide e librerie precostruite che rendono incredibilmente facile l'avvio e la gestione in fretta.

Proprio come Authy, avrai bisogno di un application server per implementare Duo poiché alcuni aspetti di esso, in particolare le chiavi segrete, devono essere definiti in un punto non accessibile. Per questo tutorial, sto usando la libreria ColdFusion di Duo, ma offrono anche librerie per:

  • Pitone
  • Rubino
  • ASP classico
  • ASP.Net
  • Giava
  • PHP
  • Node.js
  • Perl

Da una prospettiva lato server, hanno sicuramente una buona copertura.


Prepara la tua app su Duo

La prima cosa che devi fare è registrarti per un account. Non ho intenzione di guidarti attraverso quei passaggi poiché dovrebbe essere auto-esplicativo, ma dirò che è stato bello vedere un'opzione gratuita disponibile così ho potuto creare questo tutorial senza alcun costo. Sì, Duo fa pagare per il loro servizio e onestamente questa è una buona cosa. Desiderate assicurarvi che un servizio che vi aiuta a proteggere il vostro sito abbia fondi per mantenersi in affari per un po '.

Una volta effettuato l'accesso, ti verrà richiesto di configurare una nuova integrazione. Ciò significa solo che devi configurare le specifiche di ciò che desideri proteggere. E vedrai perché dico "cosa ti piacerebbe proteggere" quando clicchi sul Tipo di integrazione cadere in picchiata. Duo ti consente di configurare una varietà di opzioni di sicurezza, non solo un sito web.


Per i nostri scopi, useremo il SDK Web"opzione Nome di integrazione è un nome semantico che desideri utilizzare per identificare il tuo sito.


Dopo aver salvato tali informazioni, ti viene presentata una pagina delle impostazioni per l'integrazione. Qui è dove si sintonizzano le modalità di funzionamento dell'autenticazione e si ottiene l'accesso all'integrazione, alle chiavi segrete e al nome host API. Questi sono fondamentali per lavorare con successo con Duo e non devono essere condivisi.


Inoltre, dovrai creare la tua chiave di applicazione alfanumerica di 40 caratteri che non sarà nota a Duo e garantisce un maggiore controllo del tuo account e della tua applicazione. Ad esempio, ho generato la seguente chiave casuale per la mia app demo:

gQNU4CYYu3z5YvVuBamA7ZUvQ2cbe98jjI8G6rkL

Basta notare che deve essere lungo 40 caratteri. Altrimenti, riceverai un errore quando tenti di usarlo.

Mentre guardi attraverso le impostazioni, la maggior parte si spiega da sola ma c'è una sezione chiamata Politica che consente di definire quando verrà richiesto all'utente l'autenticazione a due fattori. È importante scegliere l'opzione migliore per la tua app. Dalla mia esperienza, la maggior parte dei siti tende a chiedere ai propri utenti se desiderano attivare la sicurezza avanzata. L'autenticazione a due fattori può essere ingombrante e alcuni utenti semplicemente non vogliono usarla. Per questo scenario, ho intenzione di andare con il Richiedi iscrizione politica (che garantirà che il processo di registrazione di Duo non venga aggirato) e che imposti un flag nel record del database dell'utente quando hanno optato per l'accesso. Ciò consente agli utenti di accedere utilizzando il normale schema di autenticazione senza essere obbligati ad autenticarsi tramite Duo.

In realtà, questo è tutto ciò di cui avevo bisogno per l'installazione nel pannello di amministrazione Duo per rendere il servizio disponibile per la mia app. Quindi iniziamo ad aggiungere in qualche codice.


Aggiunta di Duo alla mia app

Voglio ribadire che dovrai creare un codice sul lato server per fare in modo che funzioni e Duo abbia fornito una vasta gamma di librerie per l'uso.

Il codice che sto scrivendo è CFML e userò il loro componente ColdFusion che gestisce tutte le complessità della firma e della crittografia della mia richiesta, oltre a verificare il valore restituito dall'API Duo.

Come accennato in precedenza, la maggior parte delle attivazioni a due fattori sono opt-in, il che significa che un utente andrà alle impostazioni del suo account, fare clic su un link per attivare il servizio e passare attraverso un processo di compilazione di informazioni rilevanti per far funzionare le cose. Questo in genere comporta la fornitura al servizio di un numero di telefono cellulare e la convalida delle impostazioni in base a un numero univoco inviato tramite SMS o chiamata telefonica. Duo può offrire agli utenti l'opzione e fornisce anche la propria app mobile in grado di generare il passcode per gli utenti tramite il proprio telefono.

Se guardi lo screenshot qui sotto, puoi vedere come ho provato a replicare una semplice schermata dell'account con un pulsante prominente sotto di esso, come invito all'azione per attivare l'autenticazione:


Quando l'utente fa clic, viene effettuata una chiamata al componente Duo per firmare la richiesta tramite signRequest () metodo.

 

Per capire cosa fa questo metodo, mi piacerebbe utilizzare una citazione dal sito Duo:

sign_request () esegue un HMAC-SHA1 del nome utente, della chiave di integrazione e di un timestamp di scadenza, utilizzando la chiave segreta dell'integrazione come chiave HMAC. Generando questo lato server e dopo l'autenticazione primaria, Duo ha la certezza che l'utente è effettivamente autorizzato a passare allo stadio secondario di autenticazione.

Fondamentalmente, sta creando una richiesta crittografata basata su tutte le chiavi per l'integrazione, la chiave dell'applicazione 40-char univoca che hai creato e il nome utente univoco dell'utente. Il risultato finale assomiglia a questo:

TX | cmV5YmFuZ29AZ21haWwuY29tfERJVzJNWDNQUDVOV0wxOVk0SVJPfDEzNzE4NDk1MTc = | 2ec4457684ad00419cfa04f833f5e99f29d20935: APP | cmV5YmFuZ29AZ21haWwuY29tfERJVzJNWDNQUDVOV0wxOVk0SVJPfDEzNzE4NTI4MTc = | d53e0565ab8d632ccac40097dfedc4356dd79209

La firma viene archiviata nella variabile session.sigReq che è una variabile persistente basata sulla sessione di cui posso fare riferimento in seguito. Controllo il suo valore per garantire che una firma valida sia stata restituita e in tal caso, posso passare alla pagina successiva nel processo.


Il Duo IFRAME

La firma viene passata a IFRAME di Duo che gestisce sia l'aggiunta di nuovi utenti al servizio, sia la convalida degli utenti esistenti. Duo offre una libreria JavaScript che interagisce con IFRAME per fornire all'interfaccia utente l'impostazione degli utenti. Guardando il codice qui sotto, possiamo vedere l'IFRAME, il riferimento alla lib di JS Duo e la chiamata al metodo per inizializzare tutto:

  

La chiamata al metodo è semplice, prendendo tre opzioni:

  • Il nome host API che è stato definito per l'integrazione.
  • La richiesta di firma che abbiamo generato.
  • L'URL che Duo pubblicherà i risultati una volta terminato l'elaborazione.

Se sei confuso da questo, # # Session.sigReq, non essere. È solo il modo in cui ColdFusion sostituisce una variabile con il suo valore.

A questo punto, l'utente verrà presentato con la schermata di configurazione di Duo:


L'utente dovrà inserire un numero di telefono e quindi scegliere se desidera ricevere il codice di convalida a sei cifre tramite messaggio vocale o di testo. Ho provato entrambi e hanno funzionato altrettanto bene. Duo fa la verifica da parte sua per assicurarsi che il codice inserito sia valido.

Successivamente, l'utente verrà presentato con una schermata per scaricare l'app mobile Duo:


Questa è in realtà una buona cosa perché l'app mobile consente all'utente di ottenere un codice anche se non ha un servizio di cella.

Una volta che si sono registrati con successo, riceveranno la pagina mostrata qui sotto e chiederanno ancora una volta di convalidare se stessi:


Per tutti gli effetti, tutto questo processo è nelle mani di Duo; stai solo aspettando un feedback.

Tale feedback determinerà se l'utente è stato configurato correttamente e sarà necessario utilizzare il verifyResponse () metodo per quello.

Come prima, prende tutte le variabili chiave e in questo caso riceve una risposta da Duo sotto forma di una variabile pubblicata chiamata sig_response. Ho fatto riferimento come form.sig_response poiché è così che ColdFusion consente l'accesso alle variabili pubblicate.

Il verifyResponse () il metodo prenderà la risposta firmata inviata da Duo e, se tutto va bene, restituirà il nome utente dell'utente per la convalida del database. Quindi nel mio caso, mi aspetterei che "[email protected]" venga restituito. Una volta convalidato, ho quindi impostato il flag nel record del database dell'utente che mi avrebbe comunicato che hanno optato per l'autenticazione a due fattori.

Questo è tutto. È tutto ciò che devi fare per configurare gli utenti per attivare l'autenticazione a due fattori. Ora passiamo all'esperienza di accesso.


Accesso con Duo

Potresti aspettarti che qualcosa di magico accada da qui, ma abbastanza interessante, puoi quasi riutilizzare lo stesso codice esatto creato per l'attivazione di un utente per consentire loro di accedere. Sono andato avanti e ho creato una pagina di accesso molto semplice:


La pagina stessa è solo markup HTML. La parte importante è determinare innanzitutto se l'utente ha attivato e ciò accade quando si convalidano le normali informazioni di accesso al sito. Sì, dovresti comunque effettuare la normale convalida del login di nome utente e password. Il servizio di Duo è complementare a quello, non un sostituto.

Controllando il record del database, dovresti essere in grado di determinare se hanno attivato. In caso contrario, li autenticherai solo utilizzando la normale combinazione nome utente / password. Se lo hanno, allora chiamerai il signRequest () metodo, lo stesso che abbiamo usato durante l'attivazione di un nuovo utente:

Di nuovo, stiamo creando una firma crittografata da inviare all'API di Duo tramite la sua libreria IFRAME e JavaScript. La cosa fondamentale è che in questo scenario, è necessario applicare l'autenticazione a due fattori solo se l'utente ha effettuato la registrazione. Ecco perché è importante impostare la giusta politica per la tua integrazione. Impostando il mio a Richiedi iscrizione e utilizzando un flag di record del database, posso comunque consentire all'utente di accedere al mio sito anche se non hanno optato per l'autenticazione a due fattori. Se l'utente ha aderito, verrà richiesto di inserire un codice Duo per convalidare il proprio account.


Avvolgendo

Aumentare la sicurezza del proprio sito è sempre una buona cosa. Vuoi assicurarti di proteggere i tuoi utenti il ​​più possibile e utilizzare l'autenticazione a due fattori è un grande passo nella giusta direzione.

Duo offre un servizio solido con incredibile facilità e flessibilità. Mentre ti ho mostrato solo il loro Web SDK, hanno anche un'API molto più flessibile che ti dà un controllo molto granulare su gran parte degli aspetti del processo. Mentre raccomando di usare il Web SDK, è bello sapere che hai quel potere a tua disposizione. Hat parte per Duo per la creazione di un ottimo servizio.