Implementieren einer sicheren Zwei-Faktor-Authentifizierung für eine Anmeldeseite mit dem Django-Formularassistenten

8

Im Grunde möchte ich etwas erreichen, das der Zwei-Faktor-Authentifizierung von Google ähnlich ist. Mein Login-Formular besteht aus einem zweistufigen Formularassistenten:

  1. Schritt 1 (Benutzername und Passwort bestätigen)
  2. Schritt 2 (Authentifizierung des Sicherheitstokens)

Die Verwendungsszenarien wären:

  1. Der Benutzer verfügt über ein Sicherheitstoken, das mit seinem Konto verknüpft ist: Benutzer werden angemeldet, wenn der Benutzer Schritt 1 und Schritt 2
  2. übergibt
  3. Der Benutzer hat kein Sicherheitstoken: Benutzer werden direkt angemeldet, nachdem er nur Schritt 1
  4. übergeben hat

Ich untergliedere den Formular-Assistenten von django jetzt, um als meine Login-Ansicht verwendet zu werden. In Schritt 2 enthält Django FormWizard standardmäßig Feldwerte von zuvor übermittelten Formularen als ausgeblendete Felder. Aber wie Sie wissen, wird das Passwort in Schritt 1 eingegeben, daher möchte ich es aus Sicherheitsgründen nicht in Schritt 2 aufnehmen.

Mein erster Gedanke wäre, die Sitzung zu verwenden, um anzuzeigen, ob ein Benutzer Schritt 1 bestanden hat, also muss ich keine Feldwerte aus Schritt 1 hinzufügen. Aber ich kann hier etwas übersehen. Was sind die sichereren Lösungen dafür?

Ich verstehe auch nicht die Verwendung von Sicherheits-Hash in FormWizard. Kann jemand erklären?

Vielen Dank.

    
Edwin 23.02.2011, 20:49
quelle

5 Antworten

3

Ich verstehe nicht genau den Sinn des Sicherheitstokens, aber es erscheint einfacher und schneller, wenn Sie die FormWizard nicht erweitern und nur als zwei separate Ansichten implementieren. Der springende Punkt von FormWizard besteht darin, mehrere Formen zu zerlegen und zusammenzufassen, und Ihr spezieller Anwendungsfall geht dagegen - Sie hacken ihn nur, um etwas anderes zu tun.

Wie für den Sicherheits-Hash berechnet er einen Hash für alle Formulardaten aus erfolgreich abgeschlossenen Schritten. Dies ist nur eine Sicherheitsmaßnahme, um sicherzustellen, dass die Formulardaten zwischen den Schritten nicht geändert wurden / manipuliert wurden und dass keiner der Schritte irgendwie umgangen wurde.

    
Filip Dupanović 24.02.2011, 09:25
quelle
5

Das duo_web Projekt von Duo Security hat eine Open-Source-Django-Demo , die dir einen Weg zeigen wird, dies zu tun (ich bin ein Duo-Entwickler).

Das Demo-Setup verfügt über einen @duo_auth_requried-Dekorator ähnlich dem eingebauten @login_required, der nach einem Sitzungscookie sucht, das angibt, dass der Benutzer die 2.-Faktor-Authentifizierung bestanden hat. Der @login_required-Decorator überprüft die lokale Authentifizierung, der @duo_auth_required-Decorator überprüft die 2nd-Factor-Authentifizierung, und wenn er fehlt, wird der Benutzer auf das entsprechende Formular umgeleitet.

Der Unterschied zu Ihrer Beschreibung besteht darin, dass wir beide nicht in einer einzigen Form authentifizieren oder Anmeldeinformationen zwischen Formularen weitergeben, sondern separat. Schützen Sie einfach eine Ansicht mit beiden Dekoratoren, und Sie können sich darauf verlassen, dass Django die lokale Authentifizierung bestätigt, bevor die 2. Faktorauth versucht wird.

    
Karl Anderson 23.04.2011 00:00
quelle
3

Mehr als ein Jahr nach der letzten Antwort:

Django-two-factor-auth baut auf django-otp auf und fügt aus dem Box-Support für Google Authenticator, Twilio SMS, Backup-Codes. Sehr beeindruckend.

    
boatcoder 17.07.2014 09:01
quelle
1

Das Projekt django-otp fügt Django eine Plug-in-fähige Zwei-Faktor-Authentifizierung hinzu. Es kann auf verschiedenen Ebenen integriert werden, von der Ansicht bis zur Low-Level-API.

    
psagers 11.03.2013 01:19
quelle
0

Sie können ein vorhandenes Multifaktor-Authentifizierungs-Backend wie LinOTP oder privacyidea verwenden. Ich habe ein Django-Plugin erstellt.

    
cornelinux 18.07.2014 19:11
quelle