Zwei-Faktor-Authentifizierung mit APEX-Accounts

02.
November
2022
Veröffentlicht von: Dr. Gudrun Pabst

Um den Zugriff auf Anwendungen insbesondere im Internet besser zu schützen, werden die Anwendungen mit einer Zwei-Faktor-Authentifizierung versehen. Dies bedeutet, dass die Anwender ihre Identität mittels einer Kombination zweier unterschiedlicher und insbesondere unabhängiger Komponenten (Faktoren) nachweisen müssen (Wikipedia).

In diesem Artikel wird gezeigt, wie die klassische Anmeldung mittels APEX-Accounts angepasst werden muss, um eine solche Zwei-Faktor-Authentifizierung zu ermöglichen. Dabei wird unter anderem gezeigt, wie die APEX-API genutzt werden kann, um die Gültigkeit der Passwörter zu prüfen oder die Anzahl der fehlerhaften Anmeldeversuche zu protokollieren.

 

Anforderung

Die APEX-Anwendung des Kunden soll über das Internet zur Verfügung gestellt werden. Der Zugriff darauf soll daher stärker geschützt werden als nur mit der einfachen Eingabe von Usernamen und Passwörtern. Deshalb soll für die Anmeldung eine Zwei-Faktor-Authentifizierung verwendet werden.
Bei der Authentifizierung wird dabei folgendermaßen vorgegangen:
Zu Beginn meldet sich der Anwender wie immer mit Usernamen und Passwort an. Waren die Anmeldeinformationen korrekt, erhält der User nun nicht gleich Zugriff auf die Anwendung, sondern ihm wird jetzt ein Token (Zeichenfolge) per E-Mail gesendet und gleichzeitig eine Seite zur Eingabe des Tokens angezeigt. Das generierte Token ist mit einer Ablaufzeit versehen und muss vom Anwender innerhalb dieser Zeitspanne eingegeben werden. Gibt der Anwender das Token rechtzeitig und korrekt ein, wird er an der APEX-Anwendung angemeldet.

Umsetzung

Um für die Anwendung keine eigene Benutzerverwaltung zu programmieren, werden in dieser Anwendung für die erste Anmeldung APEX-Accounts verwendet.
Damit die Verwaltung der Anwender ohne Zugriff auf die Entwicklungsoberfläche erfolgen kann, wird die APEX-API zum Anlegen, Ändern und Löschen der Benutzer genutzt.
Um für den zweiten Faktor das Token per Mail zu versenden und anschließend abzufragen, muss der APEX-Login-Vorgang angepasst werden.

Benutzerverwaltung

Die neue APEX-Anwendung wird mittels Create Application – Wizard erstellt. Dabei wird für die Authentifizierung „Application Express Accounts“ ausgewählt und die Anwendung angelegt.
Damit über die Anwendung die Benutzer verwaltet werden können, müssen die Security Attributes der Anwendung passend gesetzt werden:

null

Abbildung 1: Security Attributes

 

Um die Daten zu den Anwendern zu speichern, die in der APEX-Benutzerverwaltung nicht hinterlegt werden können, werden zusätzlich Tabellen erstellt, die insbesondere das Token und seine Gültigkeitsdauer speichern:

null
Abbildung 2: Benutzerverwaltung

 

Zur Vereinfachung der Benutzerverwaltung wird die E-Mail-Adresse als Account-Name verwendet.

Für die Administration der Benutzer wird in der APEX-Anwendung ein Formular auf der Benutzer-Tabelle angelegt, in dem nach dem Standardprozess ein Prozess zur Synchronisierung des APEX-Accounts für den Benutzer eingerichtet wird. Die Synchronisation erfolgt mit Hilfe der folgenden APEX-Routinen:

  • Anlegen des Benutzers:
    apex_util.create_user
  • Ändern des Benutzers:
    apex_util.fetch_user
    apex_util.edit_user
  • Löschen des Benutzers:
    apex_util.remove_user

Die APEX-Accounts werden mit der Einstellung angelegt, dass der Benutzer bei der ersten Anmeldung sein Passwort ändern muss. Daher wird eine weitere (modale) APEX-Seite zum Ändern des Passworts erstellt.
 

Ablauf der Anmeldung

Standardmäßig läuft die Anmeldung mit einem APEX-Account wie folgt ab:

null
Abbildung 3: Standard-Ablauf der Anmeldung

 

Für die Zwei-Faktor-Authentifizierung wird der Ablauf so erweitert:

null
Abbildung 4: Anmeldung mit Zwei-Faktor-Authentifizierung

 

Login-Seite

Auf der Login-Seite werden der Anmelde-Button und das Drücken von Enter im Passwort so abgeändert, dass sie keinen Submit und dadurch den Session-Aufbau auslösen, sondern eine Dynamic Action starten, die nur die Validierung von Username und Passwort durchführt. Die möglichen Ergebnisse sind:

  • Ungültige Kombination: Erneuter Aufruf der Login – Seite
  • Passwort abgelaufen: Aufruf der Seite zum Ändern des Passworts
  • Passwort gültig: Verzweigung zur Seite für die Tokeneingabe

Ist die Kombination aus Username und Passwort ungültig, wird die Prozedur 
   apex_authentication.login
mit leerem Passwort aufgerufen. Dadurch werden das Zählen der fehlgeschlagenen Login-Versuche und die Wartezeit bis zum nächsten Login ausgelöst.

Ist das Passwort abgelaufen, wird die modale Seite für die Passwortänderung aufgerufen. Nach Änderung des Passworts wird das neue Passwort in die Login-Seite zurückgegeben und der Login mit diesem Passwort gestartet.

Bei einer gültigen Kombination aus Username und Passwort wird auf der Login-Seite ein Submit ausgelöst. Dieser setzt über
    apex_authentication.send_login_username_cookie
das Cookie für den Usernamen. Statt der Standardprozesse „Login“ und „Clear Page(s) Cache“ wird ein Prozess ausgelöst, der

  • das Token generiert,
  • Token und Gültigkeitsdauer beim Anwender in der Benutzertabelle hinterlegt
  • und die Mail mit dem Token an den Anwender sendet.

Abschließend wird auf die Seite mit der Tokenabfrage verzweigt.
 

Token-Abfrage

Über eine modale Seite wird das vorher generierte und versendete Token abgefragt.

null
Abbildung 5: Token-Abfrage

 

Dazu gibt der Anwender das Token ein, das er erhalten hat. Das Token wird mit dem gespeicherten Token und der Ablaufzeit verglichen.
Handelt es sich um ein falsches oder abgelaufenes Token, wird der Anwender aufgefordert, sich erneut anzumelden.
Ist die Token-Eingabe korrekt, wird durch den Aufruf der Prozedur
    apex_authentication.login
mit dem eingegebenen Usernamen und Passwort der Login durchgeführt und auf die Startseite der Anwendung verzweigt.

 

Zusammenfassung

Um die Zwei-Faktor-Authentifizierung mit APEX-Accounts umzusetzen, wurde parallel zur APEX-Administration eine Benutzertabelle zum Speichern der Tokens und ihrer Ablaufzeiten angelegt.
Der Ablauf der Anmeldung auf der Login-Seite wurde unterbrochen, um das Token zu generieren, zu versenden und anschließend vom Anwender abzufragen. Für diese Abfrage wurde eine modale Seite erstellt, die das eingegebene Token prüft und gegebenenfalls das Login durchführt.

 

 

 

 

 

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.