Anwendungslogin mit der IP-Adresse ... ohne Login-Dialog

Meistens erfolgt der Login in eine Application Express-Anwendung mit Benutzernamen und Passwort. Möchte man seinen Anwendern den Login-Dialog ersparen, bleibt die Möglichkeit, ganz darauf zu verzichten oder mit einem Single-Sign-On Server zu arbeiten. Verzichtet man ganz auf einen Login, so wird jeder Nutzer als APEX_PUBLIC_USER angemeldet, was auch nicht immer das gewünschte Verhalten ist.

Es ist nicht sehr bekannt, dass man das Login-Verhalten einer Application Express-Anwendung sich sehr stark variieren lässt. Als Beispiel wird heute vorgestellt wie man die Nutzer einer Anwendung automatisch mit Ihrer IP-Adresse anmelden kann. Dies ist zugegebenermaßen nicht besonders sicher, da sich eine IP-Adresse leicht fälschen lässt, aber diese Konfiguration kann als Basis für ausgefallenere Login-Methoden (Single-Sign-On) dienen.

Zunächst ein paar Grundlagen. Die IP-Adresse des Rechners, auf dem der Anwender arbeitet, wird dem Webserver durch die sog. CGI-Umgebung übermittelt. Und die lässt sich auch aus Application Express heraus auslesen. Setzen Sie im SQL Workshop folgende Abfrage ab:

select OWA_UTIL.GET_CGI_ENV('REMOTE_ADDR') from dual

Sie sollten dann Ihre IP-Adresse als Ergebnis sehen. Und dies ist die Basis für das folgende Beispiel. Nehmen Sie eine beliebige Anwendung oder erstellen Sie sich für das Beispiel eine neue. Navigieren Sie zu den Gemeinsamen Komponenten, dort zu den Authentifizierungsschemas und erstellen Sie ein neues Schema als Kopie des vorhandenen Schemas Application Express. Nennen Sie es IP-Adresse (Abbildung 1).

Authentifizierungsschema kopieren

Abbildung 1: Authentifizierungsschema kopieren

Machen Sie anschließend das neue Schema IP-Adresse zum aktuellen Authentifizierungsschema.

Neues Authentifizierungsschema IP-Adresse zuweisen

Abbildung 2: Neues Authentifizierungsschema IP-Adresse zuweisen

Navigieren Sie nun zu den Einstellungen des neuen Authentifizierungsschemas IP-Adresse und dort zur Authentifizierungsfunktion. Der hier stehende Eintrag legt fest, wie Benutzername und Passwort überprüft werden sollen. In diesem Beispiel soll erreicht werden, dass man gar kein Passwort mehr eingeben muss. Entfernen Sie daher den Eintrag -BUILTIN-, so dass das Feld leer ist. Speichern Sie die Änderungen dann ab.

Als nächstes geht es an die Login-Seite 101. Wenn ein Anwender eine Seite in der Anwendung erstmals aufruft, also noch keine gültige Application Express-Sitzung aufgebaut ist, wird er automatisch auf diese Seite verzeigt, damit er sich anmelden kann. Nach der Eingabe von Benutzername und Passwort ist der Seitenprozeß Login für die Durchführung der Anmeldung verantwortlich. Er enthält normalerweise folgenden PL/SQL-Code:

wwv_flow_custom_auth_std.login(
    P_UNAME       => :P101_USERNAME,
    P_PASSWORD    => :P101_PASSWORD,
    P_SESSION_ID  => v('APP_SESSION'),
    P_FLOW_PAGE   => :APP_ID||':1'
);

wwv_flow_custom_auth_std.login ruft im Hintergrund die im Authentifizierungsschema hinterlegte Authenfizierungsfunktion auf - diese liefert bei korrekten Anmeldedaten true zurück, so dass eine Sitzung für diesen Nutzer aufgebaut werden kann. Ändern Sie den PL/SQL-Code nun wie folgt:

wwv_flow_custom_auth_std.login(
    P_UNAME       => owa_util.get_cgi_env('REMOTE_ADDR'),
    P_PASSWORD    => null,
    P_SESSION_ID  => v('APP_SESSION'),
    P_FLOW_PAGE   => :APP_ID||':1'
);

Nun wird die IP-Adresse des Clients als Benutzername und NULL als Passwort übergeben. Die Anmeldedaten werden nicht geprüft, da Sie zu Beginn die Funktion -BUILIN- aus dem Authentifizierungsschema entfernt haben. Man kann nun also in die Anmeldemaske eingeben, was man will: Angemeldet wird man stets mit der IP-Adresse.

Nun muss nur noch dafür gesorgt werden, dass die Anmeldeseite nicht mehr angezeigt wird. Erzeugen Sie dazu auf der Seite 101 eine neue Verzweigung - diese soll noch vor dem Aufbau der Seite 101 aktiv werden, also Beim Laden: Vor Header.

Neue Verzweigung erzeugen: Beim Laden, Vor Header

Abbildung 3: Neue Verzweigung erzeugen: Beim Laden, Vor Header

Die Seite verzweigt auf sich selbst, Ziel ist also die Seite 101. Allerdings soll der Text BRANCH_TO_PAGE_ACCEPT als Request mitgegeben werden. Auch für die Eingabeelemente P101_USERNAME und P101_PASSWORT werden Werte mitgegeben: X und Y (Sie können hier allerdings beliebige Werte eintragen).

Verzweigungsziel ist die Seite 101, allerdings mit zusätzlichen Informationen

Abbildung 4: Verzweigungsziel ist die Seite 101, allerdings mit zusätzlichen Informationen

Damit nun keine Endlosschleife erzeugt wird (wir verzweigen von Seite 101 nach Seite 101), muss zwingend noch eine Bedingung hinterlegt werden: Die Verzweigung darf nur erfolgen, wenn der Text BRANCH_TO_PAGE_ACCEPT nicht im Request enthalten ist.

Bedingung für die Verzweigung

Abbildung 5: Bedingung für die Verzweigung

Wenn Sie nun alles gespeichert haben, sind Sie fertig. Starten Sie nun die Anwendung. Sie erhalten keine Login-Maske mehr, sondern werden direkt zur Anwendungsseite durchgeleitet - Ihr Username ist nun Ihre IP-Adresse (Abbildung 6).

Das Ergebnis: Der Nutzer ist mit seiner IP-Adresse angemeldet

Abbildung 6: Das Ergebnis: Der Nutzer ist mit seiner IP-Adresse angemeldet

Die IP-Adresse befindet sich nun, wie vorher der Nutzername in der Umgebungsvariable APP_USER. Damit lassen sich in gewohnter Manier Autorisierungsschemas oder Bedinungen aufbauen, so dass unterschiedliche Clients unterschiedliche Anwendungsteile sehen können.

Zurück zur Community-Seite