Două factori de autentificare cu Duo-Security

În ultimul meu articol despre autentificarea cu doi factori, am creat un screencast care a subliniat modul de utilizare a sistemului Authy cu două factori de autentificare pentru a îmbunătăți cu ușurință securitatea de autentificare a site-ului dvs. Web. De data aceasta, vom examina un alt serviciu oferit de Duo Security, care oferă un API de securitate solidă, ghiduri și biblioteci pre-construite, care fac foarte ușor să se ridice rapid.

La fel ca Authy, veți avea nevoie de un server de aplicații pentru a implementa Duo, deoarece unele aspecte ale acestuia, în special cheile secrete, trebuie definite într-un loc inaccesibil. Pentru acest tutorial, folosesc biblioteca ColdFusion a lui Duo, dar ele oferă, de asemenea, libs pentru:

  • Piton
  • Rubin
  • Clasic ASP
  • ASP.Net
  • Java
  • PHP
  • Node.js
  • Perl

Din perspectiva unui server, au o acoperire bună.


Pregătirea aplicației dvs. pe Duo

Primul lucru pe care trebuie să-l faceți este să vă înscrieți pentru un cont. Nu voi trece prin acei pași, deoarece ar trebui să fie auto-explicativ, dar voi spune că a fost grozav să văd o opțiune gratuită disponibilă pentru a putea crea acest tutorial fără nici un cost. Da, Duo se taxează pentru serviciul lor și, sincer, este un lucru bun. Doriți să vă asigurați că un serviciu care vă ajută să vă asigurați site-ul dvs. are fonduri pentru a se menține în afaceri pentru un pic.

Odată ce v-ați înscris, vi se va solicita să configurați o nouă integrare. Aceasta înseamnă că trebuie să configurați specificul a ceea ce doriți să vă asigurați. Și veți vedea de ce spun "ce doriți să vă asigurați" când faceți clic pe Tipul de integrare scapă jos. Duo vă permite să configurați o varietate de opțiuni de securitate, nu doar un site web.


În scopurile noastre, vom folosi Web SDK" Numele de integrare este orice nume semantic pe care doriți să îl utilizați pentru a vă identifica site-ul.


După salvarea acestor informații, vi se prezintă o pagină de setări pentru integrarea dvs. Aici veți regla cum trebuie să funcționeze autentificarea și să aveți acces la integrarea, cheile secrete și numele de gazdă API. Acestea sunt esențiale pentru a lucra cu succes la Duo și nu ar trebui să fie împărtășite.


În plus, va trebui să creați propria cheie de aplicație alfanumerică cu 40 de caractere, care nu va fi cunoscută de Duo, și va asigura un control mai mare al contului și al aplicației. De exemplu, am generat următoarea cheie aleatorie pentru aplicația mea demo:

gQNU4CYYu3z5YvVuBamA7ZUvQ2cbe98jjI8G6rkL

Rețineți că trebuie să aibă o lungime de 40 de caractere. În caz contrar, veți primi o eroare când încercați să o utilizați.

Pe măsură ce vă uitați prin setări, cele mai multe sunt explicative, dar există o secțiune numită Politică care vă permite să definiți când un utilizator va fi solicitat pentru autentificare cu două factori. Este important să alegeți cea mai bună opțiune pentru aplicația dvs. Din experiența mea, majoritatea site-urilor tind să-i întrebe pe utilizatori dacă doresc să se înscrie la securitatea îmbunătățită. Două factori auth poate fi greoaie și unii utilizatori nu vor să o folosească. Pentru acest scenariu, voi merge cu Solicitați înscrierea (care va asigura că procesul de înscriere Duo nu va fi bypassed) și setarea unui steag în înregistrarea bazei de date a utilizatorului atunci când au optat. Acest lucru permite utilizatorilor să se autentifice utilizând schema de autentificare normală fără a fi nevoiți să se autentifice prin Duo.

În realitate, asta e tot ce aveam nevoie să configurez în panoul de administrare Duo pentru a face serviciul disponibil pentru aplicația mea. Deci, să începem să adăugăm în unele coduri.


Adăugând Duo la aplicația mea

Vreau să reiterez că va trebui să construiți codul de pe server pentru a face acest lucru și Duo a oferit o gamă largă de libs pentru a le utiliza.

Codul pe care îl scriu este CFML și voi folosi componenta lor ColdFusion, care gestionează toate complexitățile de semnare și criptare a cererii mele, precum și verificarea valorii returnate din API-ul Duo.

Așa cum am menționat mai devreme, cele mai multe activări cu două factori sunt opt-in sensul că un utilizator va merge la setările contului lor, faceți clic pe un link pentru a porni serviciul și trece printr-un proces de completare a informațiilor relevante pentru a face lucrurile să funcționeze. Aceasta implică în general furnizarea serviciului un număr de telefon mobil și validarea setărilor pe baza unui număr unic trimis fie prin mesaj text sau printr-un apel telefonic. Duo poate oferi utilizatorilor fie opțiunea, fie și propria aplicație mobilă care poate genera codul de acces pentru utilizatori prin intermediul telefonului.

Dacă vă uitați la captura de ecran de mai jos, puteți vedea modul în care am încercat să reproduc un ecran simplu de cont cu un buton proeminent sub el, ca un apel la acțiune pentru activarea autentificării:


Când utilizatorul face clic pe el, se face un apel către componenta Duo pentru a semna cererea prin intermediul signRequest () metodă.

 

Pentru a înțelege ce face această metodă, aș dori să folosesc un citat de pe site-ul Duo:

sign_request () execută un HMAC-SHA1 al numelui de utilizator, al cheii de integrare și al unei timestamp-uri de expirare, utilizând cheia secretă a integrării ca tastă HMAC. Prin generarea acestei servere și după autentificarea primară, Duo este asigurat că utilizatorul este într-adevăr autorizat să treacă la etapa secundară de autentificare.

În principiu, se creează o cerere criptată bazată pe toate cheile pentru integrare, cheia unică de 40 de caractere creată și numele de utilizator unic al utilizatorului. Rezultatul final arată astfel:

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

Semnătura este stocată în variabilă session.sigReq care este o variabilă bazată pe sesiuni pe care o pot referi mai târziu. Am verificat valoarea sa pentru a vă asigura că o semnătură valabilă a fost transferată și, dacă da, pot trece la următoarea pagină a procesului.


Duoul IFRAME

Semnătura este transmisă IFRAME-ului Duo, care gestionează atât adăugarea de noi utilizatori la serviciu, cât și validarea utilizatorilor existenți. Duo oferă o bibliotecă JavaScript care interacționează cu IFRAME pentru a furniza interfața utilizator pentru a configura utilizatorii. Privind la codul de mai jos, putem vedea IFRAME, referința la duo JS lib și metoda de a iniția totul:

  

Apelul pentru metode este simplu, având trei opțiuni:

  • Numele de gazdă API definit pentru integrarea dvs..
  • Cererea de semnătură pe care am generat-o.
  • Adresa URL pe care Duo o va publica după ce a terminat procesarea.

Dacă sunteți confuz de asta, # # Session.sigReq, nu fi. Este doar modul ColdFusion de a înlocui o variabilă cu valoarea sa.

În acest moment, utilizatorul va fi prezentat cu ecranul de configurare Duo:


Utilizatorul va trebui să introducă un număr de telefon și apoi să aleagă dacă dorește să primească codul de validare de șase cifre prin mesaj vocal sau text. Am încercat amândouă și am lucrat la fel de bine. Duo verifică la sfârșitul lor pentru a se asigura că codul introdus este valabil.

Apoi, utilizatorul va fi prezentat cu un ecran pentru a descărca aplicația mobilă Duo:


Acest lucru este de fapt un lucru bun deoarece aplicația mobilă va permite utilizatorului să obțină un cod, chiar dacă nu are serviciu celular.

Odată ce au fost înscriși cu succes, vor primi pagina afișată mai jos și au întrebat încă o dată să se valideze:


Pentru toate intențiile, tot acest proces este în mâinile lui Duo; așteaptă doar feedback.

Acest feedback va determina dacă utilizatorul a fost configurat corect și va trebui să utilizați verifyResponse () pentru aceasta.

Ca și înainte, este nevoie de toate variabilele cheie și, în acest caz, primește un răspuns de la Duo sub forma unei variabile postate numite sig_response. Am referit-o la fel form.sig_response deoarece astfel ColdFusion permite accesul la variabilele postate.

verifyResponse () metoda va lua răspunsul semnat trimis de Duo și, dacă totul este bine, va returna numele de utilizator al utilizatorului pentru a vă valida împotriva bazei dvs. de date. Deci, în cazul meu, m-aș aștepta ca "[email protected]" să fie returnat. Odată ce l-am validat, am setat apoi pavilionul în baza de date a utilizatorului care să-mi spună că am optat pentru autentificarea cu doi factori.

Asta e. Asta e tot ce trebuie să faceți pentru a configura utilizatorii pentru a activa autentificarea cu doi factori. Acum să trecem la experiența de conectare.


Conectarea cu Duo

S-ar putea să vă așteptați la ceva magic de aici, dar destul de interesant, puteți reutiliza aproape același cod exact creat pentru a activa un utilizator pentru a vă permite să vă conectați. Am mers în față și am creat o pagină de login foarte fundamentală:


Pagina în sine este doar marcajul HTML. Partea importantă este să determinați în primul rând dacă utilizatorul a optat-o ​​și se întâmplă atunci când validați informațiile obișnuite de autentificare a site-ului. Da, ar trebui să faceți în continuare validarea normală a login-ului pentru numele de utilizator și parola. Serviciul Duo este complementar acestui lucru, nu înlocuitor.

Verificând înregistrarea bazei de date, ar trebui să puteți stabili dacă s-a înscris. În caz contrar, le-ați autentifica numai utilizând combinația obișnuită de nume de utilizator / parolă. Dacă au, atunci o să suni signRequest () metodă, aceeași pe care am folosit-o la activarea unui nou utilizator:

Din nou, creăm o semnătură criptată pentru a trimite API-ul lui Duo prin intermediul bibliotecii IFRAME și JavaScript. Cheia esențială este că în acest scenariu, trebuie doar să impunem autentificarea cu două factori dacă utilizatorul sa înscris pentru aceasta. Din acest motiv, stabilirea unei politici corecte pentru integrarea dvs. este importantă. Prin stabilirea mea Solicitați înscrierea și folosind un flag de înregistrare a bazei de date, pot permite în continuare utilizatorului să acceseze site-ul meu chiar dacă nu au optat pentru autentificarea cu doi factori. Dacă utilizatorul sa înscris, vor fi rugați să introducă un cod Duo pentru a-și valida contul.


Înfășurați-vă

Creșterea securității site-ului este întotdeauna un lucru bun. Vreți să vă asigurați că vă protejați cât mai mult utilizatorii și că autentificarea cu două factori reprezintă un pas important în direcția cea bună.

Duo oferă un serviciu solid cu incredibilă ușurință și flexibilitate. În timp ce v-am arătat doar SDK-ul Web, acestea au, de asemenea, un API mult mai flexibil, care vă oferă un control foarte granular asupra majorității aspectelor procesului. În timp ce vă recomandăm să utilizați site-ul Web SDK, este bine să știți că aveți această putere la dispoziția dvs. Hat este la Duo pentru a crea un serviciu excelent.

Cod