Zwei-Faktor-Authentifizierung mit Duo-Sicherheit

In meinem letzten Artikel zur Zwei-Faktor-Authentifizierung habe ich einen Screencast erstellt, in dem beschrieben wird, wie das Zwei-Faktor-Authentifizierungssystem von Authy verwendet wird, um die Anmeldesicherheit Ihrer Website zu verbessern. Dieses Mal werden wir uns einen anderen Service von Duo Security anschauen, der eine solide Sicherheits-API, Handbücher und vorgefertigte Bibliotheken bietet, die es sehr einfach machen, schnell einsatzbereit zu sein.

Genau wie Authy benötigen Sie einen Anwendungsserver, um Duo zu implementieren, da einige Aspekte, insbesondere die geheimen Schlüssel, an einer nicht zugänglichen Stelle definiert werden müssen. Für dieses Lernprogramm verwende ich die ColdFusion-Bibliothek von Duo. Sie bietet jedoch auch Bibliotheken für:

  • Python
  • Rubin
  • Klassischer ASP
  • ASP.Net
  • Java
  • PHP
  • Node.js
  • Perl

Server-seitig haben sie definitiv eine gute Abdeckung.


Vorbereitung Ihrer App auf Duo

Als erstes müssen Sie sich für ein Konto anmelden. Ich werde Sie nicht durch diese Schritte führen, da dies selbsterklärend sein sollte, aber ich würde sagen, es war cool, eine kostenlose Option zu sehen, so dass ich dieses Tutorial kostenlos erstellen könnte. Ja, Duo berechnet für ihren Service und das ist ehrlich gesagt eine gute Sache. Sie möchten sicherstellen, dass ein Service, der Ihnen hilft, Ihre Website abzusichern, über Geldmittel verfügt, um sich ein wenig im Geschäft zu halten.

Nach der Anmeldung werden Sie aufgefordert, eine neue Integration einzurichten. Dies bedeutet lediglich, dass Sie die Einzelheiten dessen festlegen müssen, was Sie sichern möchten. Und Sie werden sehen, warum ich sage, "was Sie sichern möchten", wenn Sie auf klicken Integrationstyp Dropdown-Liste. Mit Duo können Sie verschiedene Sicherheitsoptionen einrichten, nicht nur eine Website.


Für unsere Zwecke verwenden wir die Web-SDK"Option. Die Name der Integration ist ein semantischer Name, mit dem Sie Ihre Site identifizieren möchten.


Nach dem Speichern dieser Informationen wird eine Einstellungsseite für Ihre Integration angezeigt. Hier können Sie genau einstellen, wie die Authentifizierung funktionieren soll, und Sie erhalten Zugriff auf Ihre Integration, Ihre geheimen Schlüssel und den API-Hostnamen. Diese sind wichtig für eine erfolgreiche Zusammenarbeit mit Duo und sollten nicht geteilt werden.


Darüber hinaus müssen Sie einen eigenen alphanumerischen Anwendungsschlüssel mit 40 Zeichen erstellen, der Duo nicht bekannt ist und eine bessere Kontrolle über Ihr Konto und Ihre Anwendung gewährleistet. Ich habe zum Beispiel den folgenden zufälligen Schlüssel für meine Demo-App generiert:

gQNU4CYYu3z5YvVuBamA7ZUvQ2cbe98jjI8G6rkL

Man beachte nur, dass es 40 Zeichen lang sein muss. Andernfalls erhalten Sie eine Fehlermeldung, wenn Sie versuchen, es zu verwenden.

Wenn Sie die Einstellungen durchsehen, sind die meisten selbsterklärend, aber es gibt einen Abschnitt namens Politik Damit können Sie festlegen, wann ein Benutzer zur Zwei-Faktor-Authentifizierung aufgefordert wird. Es ist wichtig, die beste Option für Ihre App auszuwählen. Aus meiner Erfahrung fragen die meisten Websites ihre Benutzer, ob sie sich für die erweiterte Sicherheit entscheiden möchten. Zwei-Faktor-Authentifizierung kann mühsam sein und einige Benutzer möchten sie einfach nicht verwenden. Für dieses Szenario gehe ich mit dem Registrierung erforderlich Richtlinien (wodurch sichergestellt wird, dass der Duo-Registrierungsvorgang nicht umgangen wird) und das Setzen eines Kennzeichens im Datenbankdatensatz des Benutzers, wenn sie sich dafür entschieden haben. Dadurch können sich Benutzer mit Ihrem normalen Authentifizierungsschema anmelden, ohne sich über Duo authentifizieren zu müssen.

In Wirklichkeit ist das alles, was ich im Duo-Admin-Panel einrichten musste, um den Dienst für meine App verfügbar zu machen. Fangen wir also an, etwas Code hinzuzufügen.


Duo zu meiner App hinzufügen

Ich möchte noch einmal betonen, dass Sie serverseitigen Code erstellen müssen, damit dies wirklich funktioniert. Duo hat eine breite Palette von Bibliotheken bereitgestellt, die Sie verwenden können.

Der Code, den ich schreibe, ist CFML, und ich verwende die ColdFusion-Komponente, die alle Komplexitäten beim Signieren und Verschlüsseln meiner Anfrage verwaltet und den Rückgabewert der Duo-API überprüft.

Wie ich bereits erwähnt habe, sind die meisten Zwei-Faktor-Aktivierungen optional, was bedeutet, dass ein Benutzer zu seinen Kontoeinstellungen wechselt. Klicken Sie auf einen Link, um den Dienst zu aktivieren, und führen Sie einen Prozess aus, in dem Sie relevante Informationen eingeben, damit die Dinge funktionieren. Dies umfasst im Allgemeinen die Bereitstellung einer Mobilfunknummer für den Dienst und das Überprüfen der Einstellungen auf der Grundlage einer eindeutigen Nummer, die entweder per SMS oder per Telefonanruf gesendet wird. Duo kann Benutzern beide Optionen anbieten und stellt auch eine eigene mobile App bereit, die den Passcode für Benutzer über ihr Telefon generiert.

Wenn Sie sich den Screenshot unten ansehen, können Sie sehen, wie ich versucht habe, einen einfachen Kontobildschirm mit einer hervorgehobenen Schaltfläche darunter als Call-to-Action zum Aktivieren der Authentifizierung zu replizieren:


Wenn der Benutzer darauf klickt, wird die Duo-Komponente angerufen, um die Anfrage über das zu signieren signRequest () Methode.

 

Um die Funktionsweise dieser Methode zu verstehen, möchte ich ein Zitat von der Duo-Site verwenden:

sign_request () führt einen HMAC-SHA1 des Benutzernamens, des Integrationsschlüssels und einen Ablaufzeitstempel aus, wobei der geheime Schlüssel der Integration als HMAC-Schlüssel verwendet wird. Durch die Generierung dieser serverseitigen und nach der primären Authentifizierung wird sichergestellt, dass der Benutzer tatsächlich berechtigt ist, zur sekundären Authentifizierungsstufe überzugehen.

Grundsätzlich erstellen Sie eine verschlüsselte Anforderung, die auf allen Schlüsseln für Ihre Integration, dem von Ihnen erstellten eindeutigen 40-Zeichen-Anwendungsschlüssel und dem eindeutigen Benutzernamen des Benutzers basiert. Das Endergebnis sieht ungefähr so ​​aus:

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

Die Signatur wird in der Variablen gespeichert session.sigReq Dies ist eine persistente sitzungsbasierte Variable, auf die ich später zurückgreifen kann. Ich überprüfe den Wert, um sicherzustellen, dass eine gültige Signatur zurückgegeben wurde. Wenn dies der Fall ist, kann ich zur nächsten Seite übergehen.


Das Duo IFRAME

Die Signatur wird an IFRAME von Duo übergeben, die sowohl das Hinzufügen neuer Benutzer zum Service als auch die Überprüfung vorhandener Benutzer verwaltet. Duo bietet eine JavaScript-Bibliothek an, die mit IFRAME interagiert, um die Benutzeroberfläche für die Einrichtung von Benutzern bereitzustellen. Wenn Sie sich den Code unten ansehen, können Sie IFRAME, den Verweis auf die Duo JS-Bibliothek und den Methodenaufruf zum Initialisieren von alles sehen:

  

Der Methodenaufruf ist unkompliziert und umfasst drei Optionen:

  • Der API-Hostname, der für Ihre Integration definiert wurde.
  • Die von uns generierte Signaturanforderung.
  • Die URL, unter der Duo die Ergebnisse bereitstellt, sobald die Verarbeitung abgeschlossen ist.

Wenn Sie davon verwirrt sind, # session.sigReq #, sei nicht Es ist nur eine Möglichkeit von ColdFusion, eine Variable durch ihren Wert zu ersetzen.

An diesem Punkt wird dem Benutzer der Duo-Setup-Bildschirm angezeigt:


Der Benutzer muss eine Telefonnummer eingeben und dann wählen, ob er seinen sechsstelligen Bestätigungscode per Sprach- oder Textnachricht erhalten möchte. Ich habe beide ausprobiert und sie haben gleich gut funktioniert. Duo überprüft an ihrem Ende, ob der eingegebene Code gültig ist.

Als Nächstes wird dem Benutzer ein Bildschirm zum Herunterladen der Duo Mobile App angezeigt:


Dies ist eigentlich eine gute Sache, denn mit der mobilen App kann der Benutzer einen Code erhalten, auch wenn er keinen Mobilfunkdienst hat.

Nach der erfolgreichen Anmeldung erhalten sie die unten abgebildete Seite und werden noch einmal aufgefordert, sich selbst zu bestätigen:


Der gesamte Prozess liegt in jeder Hinsicht in Duos Hand. Sie warten nur auf Feedback.

Diese Rückmeldung bestimmt, ob der Benutzer ordnungsgemäß eingerichtet wurde, und Sie müssen das verwenden verifyResponse () Methode dafür.

Wie zuvor nimmt es alle wichtigen Variablen und erhält in diesem Fall eine Antwort von Duo in Form einer aufgerufenen veröffentlichten Variablen sig_response. Ich habe es als bezeichnet form.sig_response So ermöglicht ColdFusion den Zugriff auf veröffentlichte Variablen.

Das verifyResponse () Die Methode nimmt die signierte Antwort zurück, die von Duo zurückgesendet wurde. Wenn alles in Ordnung ist, wird der Benutzername des Benutzers zur Überprüfung in Ihrer Datenbank zurückgegeben. In meinem Fall würde ich also erwarten, dass "[email protected]" zurückgegeben wird. Sobald ich es validiert habe, setze ich das Kennzeichen im Datenbankdatensatz des Benutzers, das mich darüber informiert, dass sie sich für die Zwei-Faktor-Authentifizierung entschieden haben.

Das ist es. Das ist alles, was Sie tun müssen, um Benutzer zur Aktivierung der Zwei-Faktor-Authentifizierung einzurichten. Lassen Sie uns nun zum Login-Erlebnis wechseln.


Mit Duo einloggen

Sie können von hier aus etwas Magisches erwarten, aber interessanterweise können Sie den gleichen Code, der für die Aktivierung eines Benutzers erstellt wurde, fast wieder verwenden, um sich anzumelden. Ich habe eine sehr einfache Login-Seite erstellt:


Die Seite selbst ist nur HTML-Markup. Der wichtige Teil besteht darin, zuerst zu ermitteln, ob der Benutzer sich angemeldet hat, und dies geschieht, wenn Sie die normalen Anmeldeinformationen der Site überprüfen. Ja, Sie sollten immer noch Ihre normale Login-Validierung von Benutzername und Passwort durchführen. Der Service von Duo ergänzt dies, kein Ersatz.

Durch das Überprüfen des Datenbankeintrags sollten Sie feststellen können, ob sie sich angemeldet haben. Wenn dies nicht der Fall ist, authentifizieren Sie sie nur mit Ihrer normalen Kombination aus Benutzername und Kennwort. Wenn ja, dann rufen Sie an signRequest () Methode, dieselbe, die wir beim Aktivieren eines neuen Benutzers verwendet haben:

Auch hier erstellen wir eine verschlüsselte Signatur, die über die IFRAME- und JavaScript-Bibliothek an Duos API gesendet wird. Der Schlüssel ist, dass in diesem Szenario die Zwei-Faktor-Authentifizierung nur erzwungen werden muss, wenn sich der Benutzer dafür angemeldet hat. Deshalb ist es wichtig, die richtige Richtlinie für Ihre Integration festzulegen. Indem ich meine auf Registrierung erforderlich Wenn Sie ein Datenbankdatensatz-Flag verwenden, kann ich dem Benutzer trotzdem den Zugriff auf meine Website erlauben, auch wenn er sich nicht für die Zwei-Faktor-Authentifizierung angemeldet hat. Wenn sich der Benutzer angemeldet hat, wird er aufgefordert, einen Duo-Code einzugeben, um sein Konto zu bestätigen.


Einpacken

Die Sicherheit der eigenen Website zu erhöhen, ist immer eine gute Sache. Sie möchten sicherstellen, dass Sie Ihre Benutzer so weit wie möglich schützen. Die Zwei-Faktor-Authentifizierung ist ein großer Schritt in die richtige Richtung.

Duo bietet einen soliden Service mit unglaublicher Leichtigkeit und Flexibilität. Ich habe Ihnen zwar nur das Web-SDK gezeigt, sie verfügen jedoch auch über eine viel flexiblere API, mit der Sie die meisten Aspekte des Prozesses sehr genau steuern können. Ich empfehle zwar die Verwendung des Web-SDK, es ist jedoch sehr gut zu wissen, dass Sie über diese Leistung verfügen. Hat sich für Duo entschieden, um einen großartigen Service zu schaffen.