Beschreibung
Die Zwei-Faktor-Authentifizierung (2FA) kann im EGOCMS aktiviert werden und erfordert nach der erfolgreichen Eingabe eines Benutzernamen und Passworts zusätzlich die Eingabe eines Codes, der von einer OTP App (auch Authenticator App genannt) generiert wurde. Der Code kann nur mit dem Profil der OTP App generiert werden, die für die Einrichtung verwendet wurde. Dieser Code ändert sich in regelmäßigen Abständen, so dass die Anmeldung insgesamt wesentlich sicherer ist.
Die Zwei-Faktor-Authentifizierung steht nur für die Standard EGOCMS Authentifizierung EGOTEC zur Verfügung. Andere Authentifizierungen werden nicht unterstützt oder bieten durch die Anbindung eines externen Dienstes ähnliche Funktionalitäten.
Einstellungen
Wird die EGOTEC Authentifizierung verwendet, steht der untergeordnete Reiter 2FA zur Verfügung. Hier kann diese in mehreren Voreinstellungen aktiviert werden:
- Aktiviert: Die 2FA steht zur Verfügung und kann von jedem Benutzer manuell im Profil aktiviert werden.
- Für alle Benutzer immer aktiviert: Die 2FA ist für alle Benutzer immer aktiviert und kann nicht deaktiviert werden.
- Nur für Redakteure immer aktiviert: Die 2FA ist nur für Redakteure immer aktiviert und kann nicht deaktiviert werden. Für Intranet Benutzer kann die 2FA manuell aktiviert werden.
- Nur für Intranet Benutzer immer aktiviert: Die 2FA ist nur für Intranet Benutzer immer aktiviert und kann nicht deaktiviert werden. Für Redakteure kann die 2FA manuell aktiviert werden.
- Nur für bestimmte Gruppen/Rollen immer aktiviert: Die 2FA ist nur für Benutzer mit bestimmten Gruppen/Rollen immer aktiviert und kann nicht deaktiviert werden. Für alle anderen Benutzer kann die 2FA manuell aktiviert werden.
Sofern ein Benutzer die 2FA manuell aktivieren kann, kann die entsprechende Checkbox im Profil gesetzt werden. Alle Benutzer, für die die 2FA immer aktiviert ist, ist diese Checkbox immer gesetzt und deaktiviert (der Zustand kann nicht geändert werden).
Ist für einen Benutzer die 2FA aktiviert, muss einmalig die Einrichtung erfolgen. Nach der ersten Anmeldung wird dem Benutzer ein QR Code angezeigt, der mit einer bevorzugten OTP App gescannt werden kann. Das Scannen legt in der OTP App ein neues Profil an, das für die Code Generierung verwendet werden kann.
Alternativ können auch die Informationen des Profils angezeigt und manuell in der OTP App eingegeben werden.
Die verwendete OTP App muss TOTP (Time-based One-time Password) unterstützen. HOTP wird nicht unterstützt.
Bei der Einrichtung wird über einen Algorithmus ein sogenannter Secret generiert. Die Einstellungen zum Algorithmus und der Secret müssen der OTP App bekannt sein, damit diese immer einen passenden Code generieren kann.
Sie können die Einstellungen zum Algorithmus bei Bedarf ändern:
- Anzahl Ziffern: Der zu erwartende Code muss diese Anzahl an Ziffern haben (Standard: 6).
- Intervall: Intervall in Sekunden, in welchem ein neuer Code generiert wird (Standard: 30).
- Algorithmus: Der verwendete Algorithmus für die Generierung des Codes (Standard: SHA256).
Der Wert für die Bezeichnung ist optional und wird nur in der OTP App zur Kennzeichnung des Profils verwendet. Standardmäßig wird die aktuelle Domain übergeben.
Ist der eingegebene Code richtig, erfolgt nun die Anmeldung. Die Einrichtung ist damit abgeschlossen.
Die Einrichtung muss für alle zukünftigen Anmeldungen nicht erneut erfolgen. Nach der Eingabe des Benutzernamen und Passworts erfolgt dann nur noch die Abfrage nach dem Code, der durch die bei der Einrichtung verwendeten OTP App generiert wird.
Sollten Sie die Einstellungen zum Algorithmus nachträglich ändern, müssen alle bei den Benutzern gespeicherten Secrets zurückgesetzt werden, da die Code Überprüfung durch die Änderungen nicht mehr funktionieren wird. Demnach müssen alle betroffenen Benutzer die 2FA Einrichtung erneut durchführen
Sie können jederzeit alle Secrets aller Benutzer zurücksetzen. Dazu betätigen Sie den vorgesehenen Button.
Seitentyp anpassen
Die 2FA Funktionalität steht für das Backend und Frontend Login zur Verfügung. Für das Frontend Login ist der Standard Seitentyp "Intranet/Login & Profil" zuständig. Sollten Sie eine angepasste Version des Seitentypen besitzen, der noch nicht um die 2FA Funktionalität ergänzt wurde, müssen Sie das zuerst tun, bevor Sie die 2FA für die Benutzer einsetzen können, die sich ausschließlich über das Frontend anmelden.
Falls Sie das Skript intranet/profile/index.php angepasst haben, ergänzen Sie diese Datei um folgende Zeilen:
// Zwei-Faktor-Authentifizierung
require 'auth/tfa.php';
Falls Sie das Template intranet/profile/body.tpl angepasst haben, ergänzen Sie diese Datei um folgende Zeilen:
{if $tfa}
<input type="hidden" name="doauth" value="tfa">
{if $tfa.setup}
<div>
<img src="{qr text=$tfa.text}" alt="tfa-qr-code" id="verification-image">
<br>
<div id="verification-text-1">
<p>
{t}Scannen Sie den angezeigten QR Code mit einer bevorzugten OTP App. Geben Sie dann den generierten Code ein, um die Einrichtung abzuschließen.{/t}
</p>
<p>
<a href="javascript:void(0)" onclick="toggle_verification_text()">{t}Klicken Sie hier, falls Sie die Einrichtung in der App manuell vornehmen möchten.{/t}</a>
</p>
</div>
<div id="verification-text-2">
<p>
{t}Geben Sie in Ihrer App folgende Informationen an:{/t}
</p>
<p>
{$tfa.information}
</p>
</div>
</div>
{/if}
<div>
<p>
{t}Code eingeben{/t}
</p>
<input type="text" name="verification" maxlength="{if $egotec_conf.auth.tfa_digits}{$egotec_conf.auth.tfa_digits}{else}6{/if}" inputmode="numeric" pattern="[0-9]*" autocomplete="off" placeholder="{t}Code eingeben{/t}" title="{t}Im Code sind nur Zahlen erlaubt{/t}" />
</div>
{else}
{* Standard Login-Maske *}
{/if}
Den Quellcode können Sie dabei nach Ihren Vorstellungen gestalten. Wichtig ist der Einsatz folgender Code-Bestandteile:
{* Hidden Feld "doauth" mit dem Wert "tfa" setzen *}
<input type="hidden" name="doauth" value="tfa">
{* Soll 2FA verwendet werden, existiert die Variable $tfa (anderfalls wird die normale Login-Maske angezeigt) *}
{if $tfa}...{else}...{/if}
{* Soll die 2FA Einrichtung erfolgen, existiert zudem die Variable $tfa.setup *}
{if $tfa.setup}...{/if}
{* Stellen Sie den QR Code mit dem Text aus $tfa.text für die Einrichtung dar *}
<img src="{qr text=$tfa.text}">
{* Geben Sie die Informationen für die manuelle Einrichtung über $tfa.information aus *}
{$tfa.information}
{* Stellen Sie ein Eingabe-Feld für den Code dar (berücksichtigt die eingesellte Anzahl der Ziffern) *}
<input type="text" name="verification" maxlength="{if $egotec_conf.auth.tfa_digits}{$egotec_conf.auth.tfa_digits}{else}6{/if}" inputmode="numeric" pattern="[0-9]*" autocomplete="off" placeholder="{t}Code eingeben{/t}" title="{t}Im Code sind nur Zahlen erlaubt{/t}">
Bei Bedarf können Sie auch die Standard Dateien lib/type/site/intranet/profile/index.php und lib/type/skin/intranet/profile/body.tpl als Vorlage verwenden.
Bitte beachten Sie, dass die Zwei-Faktor-Authentifizierung nur ab PHP 8.1 genutzt werden kann.