Einmalige EGL-Anmeldung

Authentifizierung für Anwendung und Proxy kombinieren

Durch Verwenden der einmaligen EGL-Anmeldung können Sie folgende Aspekte der Sicherheit zu einem einzigen Schritt verbinden: Authentifizierung für Ihre Anwendung (geschützt durch angepasste Sicherheit) und Authentifizierung für den EGL Rich UI-Proxy (geschützt durch JEE-Sicherheit). Sie können auch die Authentifizierung für Web-Services einschließen.

Zwar müssen die Benutzerregistrys, die Sie für die Authentifizierung für die Anwendung, den EGL Rich UI-Proxy und Web-Services verwenden, nicht gleich sein; die bei der einmaligen EGL-Anmeldung verwendete Benutzer-ID und das zugehörige Kennwort müssen jedoch in allen relevanten Benutzerregistrys vorhanden sein, um einen Authentifizierungsfehler zu vermeiden.

Für die einmalige EGL-Anmeldung muss die Rich UI-Anwendung eine Anmeldeanzeige definieren, die ein Feld für die Benutzer-ID, ein Feld für das Kennwort und eine Befehlsschaltfläche enthält, wie im folgenden Beispiel gezeigt:
useridLabel TextLabel { text = "User ID:", width = 80 };
useridField TextField { width = 100 };
useridBox  Box { children = [ useridLabel, 
                 useridField ], margin = 3 };
passwordLabel TextLabel { text = "Password:", width = 80 };
passwordField PasswordTextField { width = 100 };
passwordBox Box { children = [ passwordLabel, 
                  passwordField ], margin = 3};
button Button { text = "Log in", onClick ::= authenticate };
ui Box { background = "blue",
         children = [ useridBox, passwordBox, button ], 
         columns = 1, width = 200 };

Bei jedem Aufrufen eines Web-Service, wird eine Anforderung an den EGL Rich UI-Proxy gesendet. Da der Proxy mithilfe der JEE-Basisauthentifizierung geschützt ist, muss ein Benutzer sich anmelden, bevor er auf den Proxy zugreifen kann. Falls der Benutzer noch nicht angemeldet ist, wird beim ersten Aufrufen eines Web-Services eine vom Browser bereitgestellte Anmeldeanzeige angezeigt, die dem Beispiel in 'Basisauthentifizierung zum Schützen des EGL Rich UI-Proxys verwenden' ähnelt.

Wenn sich der Benutzer mithilfe der oben erwähnten benutzerdefinierten Anmeldeanzeige für die Rich UI-Anwendung authentifiziert, übergibt EGL bei der einmaligen EGL-Anmeldung die Berechtigungsnachweise (Benutzer-ID und Kennwort) an die JEE-Sicherheit, sodass diese Berechtigungsnachweise auch für die Authentifizierung für den Proxy verwendet werden können. Die Authentifizierung für die Anwendung wird mit der Authentifizierung für den Proxy zu einem Schritt kombiniert. Damit die einmalige EGL-Anmeldung funktioniert, müssen Sie die Rich UI-Anmeldung so entwerfen, dass der Web-Service für die Authentifizierung bei der Anwendung aufgerufen wird, bevor ein beliebiger anderer Web-Service aufgerufen wird. Dadurch wird der vom Browser bereitgestellte Anmeldedialog umgangen.

Zum Implementieren der einmaligen EGL-Anmeldung verwenden Sie die Systemfunktion ServiceLib.setProxyBasicAuthentication(), um die Benutzer-ID und das Kennwort für die Authentifizierung für den Proxy zu übergeben. Rufen Sie diese Systemfunktion auf, bevor Sie den Service für die Anmeldung bei der Anwendung aufrufen. Die Authentifizierungsfunktion für den oben stehenden EGL-Code kann wie das folgende Beispiel aussehen:
function authenticate( e Event in )
   ServiceLib.setProxyBasicAuthentication(useridField.text,passwordField.text );
   srvc LDAPLoginService{ @bindService };
   call srvc.login( useridField.text, passwordField.text )
                    returning to loginCallback onException loginException;
end   

Web-Service-Authentifizierung hinzufügen

In der Regel muss eine Rich UI-Anwendung zum Authentifizieren bei einem geschützten Web-Service den Benutzer auffordern, die Benutzer-ID und das Kennwort einzugeben. Sie können jedoch die Benutzer-ID und das Kennwort, die Sie für die einmalige EGL-Anwendung verwenden, an einen geschützten Web-Service übergeben. Rufen Sie dazu die Systemfunktion ServiceLib.setHTTPBasicAuthentication() auf, bevor Sie den geschützten Web-Service aufrufen, und übergeben Sie die Benutzer-ID und das Kennwort, die für die einmalige EGL-Anmeldung verwendet wurden, an die Funktion.
function withdraw( e Event in )
   ServiceLib.setHTTPBasicAuthentication(srvc, useridField.text,
                                         passwordField.text );
   srvc BankingService{ @bindService };
   call srvc.withdraw( useridField.text, passwordField.text )
                       returning to withdrawCallback onException withdrawException;
end

Authentifizierungsfehler handhaben

Wenn Sie die einmalige EGL-Anmeldung verwenden, um eine Authentifizierung für Ihre Anwendung und den EGL Rich UI-Proxy durchzuführen, tritt die Authentifizierung für den Proxy vor der Authentifizierung für Ihre Anwendung auf. Da der EGL Rich UI-Proxy mithilfe der JEE-Basisauthentifizierung geschützt ist, handhabt der Web-Container und nicht die Anwendung die Anmeldefehler. Da der Web-Container dazugekommen ist, können Sie sich nicht mehr in einem einzigen Schritt authentifizieren. An diesem Punkt muss sich der Benutzer zuerst für den EGL Rich UI-Proxy authentifizieren und sich danach bei der Anwendung und/oder den Web-Services anmelden.

Wenn Benutzer in dieser Anmeldeanzeige ein ungültiges Kennwort für die Authentifizierung für den EGL Rich UI-Proxy eingeben, wird ein vom Browser bereitgestellter Dialog angezeigt, sodass der Anmeldeversuch wiederholt werden kann. Bei der JEE-Basisauthentifizierung fordert der Web-Container den Browser auf, die Anzeige des Dialogs solange zu wiederholen, bis der Benutzer sich erfolgreich angemeldet hat. Die Anwendung kann nicht auf das Kennwort zugreifen, das ein Benutzer in diesen Dialog eingibt.

Nachdem Benutzer gültige Berechtigungsnachweise für den EGL Rich UI-Proxy eingegeben haben, müssen sie sich für die Anwendung und/oder die Web-Services authentifizieren. Die Anwendung sollte Benutzer anweisen, die gültige Benutzer-ID und das zugehörige Kennwort erneut in die benutzerdefinierte Anmeldeanzeige einzugeben und erneut auf die Schaltfläche 'Anmelden' zu klicken.

Falls ein Fehler auftritt, wenn Benutzer sich für einen durch die HTTP-Basisauthentifizierung geschützten Web-Service authentifizieren, wird die Steuerung an den Ausnahmebedingungshandler übergeben, der für die Aufrufanweisung angegeben ist. Ihre Rich UI-Anwendung muss diesen Fehler erkennen und entsprechende Anweisungen bereitstellen, sodass sich der Benutzer erneut authentifizieren kann. Das folgende Beispiel zeigt die Besonderheiten dieser Fehlerart:

Fehler bei Authentifizierung für einen Web-Service

Konfiguration
Ein Web-Service wird mithilfe der JEE-Basisauthentifizierung geschützt.
Problem
Im HTTP-Header werden keine gültige Benutzer-ID mit zugehörigem Kennwort für den Web-Service gefunden.
Fehler
Es wird die Ausnahmebedingung 'ServiceInvocationException' ausgelöst, die die Nachrichten-ID 'EGL1539E' aufweist und folgende Nachricht ausgibt: 'Bei der Kommunikation mit dem Service trat eine Ausnahmebedingung auf. URL: {0}'. Dabei ist {0} die URL des Web-Service. Für 'detail1' der Ausnahmebedingung 'ServiceInvocationException' wird '401' festgelegt; für 'detail2' wird 'Unauthorized' festgelegt; für 'detail3' wird 'Server returned HTTP response code: 401 for URL: {0}' festgelegt, 'name' ist 'egl.core.ServiceInvocationException'.
Lösung
Rufen Sie ServiceLib.setHTTPBasicAuthentication() auf, um im HTTP-Header eine gültige Benutzer-ID mit zugehörigem Kennwort festzulegen, bevor der Web-Service verarbeitet wird.

Wenn die Authentifizierung sowohl für den EGL Rich UI-Proxy als auch für den Web-Service erfolgreich ist, aber ein Fehler auftritt, wenn Sie versuchen, sich für die Anwendung zu authentifizieren, muss Ihre Rich UI-Anwendung den Fehler handhaben. Wenn der Web-Service eine Antwort zurückgibt, wird die Steuerung an die 'Callback-' bzw. 'Rückruffunktion' übergeben, die für Ihre Aufrufanweisung angegeben ist.


Feedback