Im Grunde möchte ich etwas erreichen, das der Zwei-Faktor-Authentifizierung von Google ähnlich ist. Mein Login-Formular besteht aus einem zweistufigen Formularassistenten:
Die Verwendungsszenarien wären:
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.
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.
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.
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.
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.
Sie können ein vorhandenes Multifaktor-Authentifizierungs-Backend wie LinOTP oder privacyidea verwenden. Ich habe ein Django-Plugin erstellt.
Tags und Links django authentication django-formwizard