Zwei Faktor Authentifizierung (Konzept)
Für Benutzerlogins kann eine sogenannte Zwei-Faktor Authentifizierung (2FA) implementiert werden. Dabei wird neben Benutzername und Passwort eine weitere Sicherheitsabfrage gestellt, welche zum Login erfolgreich beantwortet werden muss.
Hierbei kann sowohl ein eigener Prozess (z.B. Security-Token via Email) implementiert, oder auch ein externer TOTP Provider angebunden werden (z.B. Authentifizierung via Microsoft App). Voraussetzung für TOTP ist _data 4.5 oder höher.
Die 2FA selbst wird über Ereignisbehandlungen implementiert. Dafür stehen folgende Ereignisse zur Verfügung:
Zum Implementieren eines TOTP 2FA können folgende Bausteine verwendet werden:
Wichtiger Hinweis
Zwei-Faktor-Authentifizierungsansätze werden in _pro über Ereignisbehandlungen konfiguriert, welche aus Sicherheitsgründen nicht über den abgesicherten Modus ausgehebelt werden können.
Daher können Fehler in der Konfiguration zum permanenten Aussperren der Benutzer führen. Sollte dies geschehen, kann die Sicherheitsprüfung nur über folgende Schritte einmalig ausgehebelt werden:
Eine Datei namens "skip_tfa_for_USERNAME" im "backup" Verzeichnis des data Wizard abgelegt werden (Standardmäßig "datawizard/backup"). Diese Datei wird automatisch wieder entfernt, wenn der Login erfolgreich war
Login in abgesichertem Modus (URL Parameter safeMode=true), mit dem Benutzer, welcher im Namen der Backupdatei aufgeführt wird
Es wird daher beim Entwickeln eines 2FA Workflows empfohlen, diesen in einer separaten Sitzung (z.B. Inkognitofenster) zu testen, damit das Aussperren des Konfigurators im Vorfeld verhindert werden kann.
2FA mittels TOTP
Die Zwei-Faktor-Authentifizierung mittels TOTP erfolgt in zwei Schritten. In dem ersten Schritt wird ein geheimer Schlüssel erzeugt und zwischen der Authenticator App und dem jeweiligen Provider geteilt.
Dieser Schritt kann durch den Baustein Gerät registrieren gestartet und auch durch Gerät deregistrieren wieder rückgängig gemacht werden.
Ob ein Gerät für einen bestimmten Benutzer bereits zugelassen ist, kann mittels Zwei Faktor Gerät registriert? geprüft werden. Das heisst, es kann im Login-Prozess erst geprüft werden, ob ein Gerät registriert ist, und danach, je nach Ergebnis, entweder den Registrierungsprozess oder eine 2FA Authentifizierung starten.
Dieser erste Schritt muss für jeden Benutzer nur einmal durchlaufen werden.
Im zweiten Schritt wird, bei jedem Login, ein Code abgefragt, der dann auf Korrektheit geprüft wird. Der prinzipielle Ablauf ist im folgenden Bild dargestellt:
Nach dem Benutzer-Login wird das Ereignis Zwei Faktor Authentifizierung: Vorbereiten ausgelöst. Hierauf kann in der Ereignisaktion prinzipiell beliebig reagiert werden (siehe Beispiele unten), im Falle von TOTP wird mit der Aktion Vorbereiten der Code abgefragt. Anschliessend wird das Ereignis Verifizieren ausgelöst. In dieser Ereignisbehandlung kann mit der Aktion Verifizieren auf Korrektheit geprüft werden.
Alle Aktionen können noch mit einem Parameter "Für Benutzer" auf einen anderen Benutzer als den Inhaber der aktuellen Session angewendet werden.
Beispiel
Für die 2FA mittels TOTP muss in der Konfigurationsdatei $HUB_HOME/etc/auth.xml die entsprechende Aktivierung eingetragen sein (als Beispiel der Authenticator von google, andere zulässige Authenticator können in der _data Hilfe nachgelesen werden):
<Call name=
"addTFAHandler"
>
<Arg>com.ebd.hub.services.auth.tfa.otpauth.TOTPHandler</Arg>
<Call name=
"addDeviceTemplate"
>
<Arg>GoogleAuthenticator</Arg>
<Arg>HmacSHA1</Arg>
</Call>
</Call>
Für 2FA ohne TOTP muss in Konfigurationsdateien nichts geändert werden.
Im Folgenden ein vereinfachtes Beispiel einer 2FA mit einem Google Authenticator (dieses Beispiel ist nicht übertragbar, im Falle einer fehlenden Geräteregistrierung müssten entsprechende Aktion erfolgen):
|
Im linken Bild ist die 2FA Vorbereitung zu sehen: Die Typprüfung prüft auf eine 2FA Anfrage und ob für den Benutzer ein Gerät registriert ist. Ist beides erfüllt, wird die Aktion Vorbereiten ausgeführt. Diese fragt nach dem Code, der im Authentikator angezeigt wird. Hat man diesen Code abgeschickt, wird im rechten Teil die Überprüfung ausgeführt. Die Typprüfung ist wie im linken Beispiel, die Aktion die benötigt wird, ist 2FA - Verifizieren. |
|
2FA mittels eigener Verifizierungsmethode
Prinzipiell können mit den zur Verfügung gestellten Aktionen beliebige zweite Faktoren zur Authentifizierung erzeugt werden (zum Beispiel ein Token, welcher per Email verschickt und dann abgefragt wird, siehe auch die Beispiele unten). Wichtig dabei ist, dass der entspechende Wert über storage weitergegeben wird.
Beispiel
Analog zur TOTP Authentifizierung können auch eigene Methoden mit den Ereignissen Zwei Faktor Authentifizierung: Vorbereiten (Ereignis) und Zwei Faktor Authentifizierung: Verifizieren (Ereignis) implementiert werden.
Wie bereits erwähnt, geben diese Ereignisse einen Zwei Faktor Authentifizierungs-Request an die Regeln und Aktionen weiter. In dessen "storage" (erreichbar via Datenfeld), lassen sich mit dem Objekt-Feld Wertauflöser beliebige Werte schreiben und lesen.
Diese bleiben über die Zwei Faktor Ereignisse hinweg erhalten.
Das Konzept ist daher simpel: Ermittle ein Geheimnis bei Zwei Faktor Authentifizierung: Vorbereiten (Ereignis), speichere es in den Storage des Eingabeobjektes und teile es dem Benutzer auf einem beliebigen Weg mit. Prüfe das Geheimnis dann beim Ereignis Zwei Faktor Authentifizierung: Verifizieren (Ereignis).
Nachfolgend zwei extrem simple Beispiel-Ereignisbehandlungen, welche diesen Workflow abbilden:
|
|
Dem Benutzer soll die Nachricht "Nenne das Geheimnis!" dargestellt werden. |
Beim Verifizieren (nachdem der Benutzer das Geheimnis eingegeben hat), wird geprüft, ob das Geheimnis aus dem |
Das konfigurierte Beispiel in Aktion:
Nach der korrekten Eingabe des Benutzernamens und des Passwortes, wird der Benutzer mit folgender Meldung konfrontiert:
Gibt der Benutzer das Geheimnis "Zitronensorbet" korrekt ein, wird er erfolgreich eingeloggt.