Externe Autorisierung

Wie kann man eine externe Autorisierung über API durchführen?

Petr Pech avatar
Verfasst von Petr Pech
Vor über einer Woche aktualisiert

Das Wirtschaftssystem ABRA Flexi authentifiziert Benutzer normalerweise gegen die interne Benutzerdatenbank. Natürlich ist es auch möglich, sich gegen externe Systeme (z.B. LDAP) zu authentifizieren. Zu diesem Zweck haben wir eine Java-Schnittstelle vorbereitet, die Ihnen dies ermöglicht. Der so geschriebene Code wird dann als Teil des Servers ausgeführt und ermöglicht die Authentifizierung gegenüber externen Systemen.

Bitte beachten Sie: Diese Schnittstelle ist experimentell und kann nicht in der Cloud verwendet werden. Wenn Sie diese Funktion nutzen möchten, kontaktieren Sie uns bitte.

Die Basis für alles ist die Schnittstelle cz.winstrom.auth.Auth:

package cz.winstrom.auth; import cz.winstrom.vo.UserInfo; import java.sql.Connection; /** * * Grundlegende Schnittstelle zur Authentifizierung von Benutzern gegenüber anderen Diensten. Er wird über die Einstellungen in der Datei flexibee-server.xml eingerichtet: * * de.winstrom.auth.AuthSimple * * Als Parameter ist dies der Name der Klasse, die in den CLASSPATH des Servers gelangen soll. * * Im Moment kann die Anwendung nur eine einfache Passwort-Authentifizierung durchführen. * * Aufgrund von Änderungen in dieser Schnittstelle wird empfohlen, dass Implementierer von der abstrakten Klasse "AuthBase" erben. * * @author fers */ public interface Auth { /** * Benutzer mit Namen und Passwort autorisieren. * * @param connection Verbindung zur centralServer-Datenbank * @param userInfo Benutzerinformationen aus centralServer.csuzivatel. Wenn null, existiert kein solcher Benutzer in der Hauptbenutzerdatenbank von ABRA Flexi. Bei erfolgreicher Autorisierung wird sie erstellt. * @param username Benutzername * @param password Benutzerpasswort * @return true, wenn das Passwort korrekt eingegeben wurde. */ boolean authenticate(Connection connection, UserInfo userInfo, String username, String password); /** * Wenn die Autorisierung erfolgreich war, der Benutzer aber nicht in der Datenbank centralServer.csuzivatel existiert, wird er angelegt. Das Berechtigungssystem kann die Informationen über den zugrundeliegenden Benutzer beeinflussen, indem es die Klasse * userInfo ausfüllt. * * Die ID darf nicht geändert werden (sie hat den Wert -1) und es wird empfohlen, das Passwort nicht einzugeben, da die Authentifizierung immer gegen das Autorisierungssystem erfolgt. * * Normalerweise werden nur die Zugriffsrechte ausgefüllt (Anlegen einer Firma, Löschen einer Firma, ...) * * @param connection Verbindung zur centralServer-Datenbank * @param userInfo Benutzerinformationen, die zurückgegeben werden sollen (es kann auch eine andere Instanz zurückgegeben werden, diese muss aber korrekt ausgefüllt werden. * @Rückgabe von Benutzerinformationen, die in der Datenbank gespeichert werden sollen. Typischerweise wird ein geänderter userInfo-Parameter zurückgegeben. */ public UserInfo getUserInfo(Connection connection, UserInfo userInfo); }

Für eine direkte Implementierung verwenden Sie jedoch immer die Vererbung von der Klasse cz.winstrom.auth.AuthBase, die es uns ermöglicht, diese Schnittstelle unter Beibehaltung der Abwärtskompatibilität zu modifizieren oder einige Methoden vorzuimplementieren.

Die eigentliche Implementierung der Berechtigungsklasse könnte wie folgt aussehen:

public class AuthSimple extends AuthBase { public boolean authenticate(Connection connection, UserInfo userInfo, String username, String password) { // einfache Authentifizierung: Benutzername und Passwort sind gleich return username.equalsIgnoreCase(password); } @Override public UserInfo getUserInfo(Connection connection, UserInfo userInfo) { userInfo.setCreateCompany(true); // dem neuen Benutzer erlauben, eine Firma anzulegen return userInfo; } } }

Und der Vollständigkeit halber nur die Standardimplementierung der Authentifizierung vom ABRA-Flexi-Server:

/** * Der grundlegende Authentifizierungsmechanismus, der normalerweise von ABRA Flexi verwendet wird. Es authentifiziert den Benutzernamen und das Passwort gegen die Tabelle centralServer.csuzivatel. */ public class AuthDefault extends AuthBase { /** * Authentifiziert den Benutzer gegen das Passwort in centralServer.csuzivatel. * Wenn der Benutzer nicht existiert, ist userInfo null. * * @param connection * @param userInfo * @param username * @param password * @return */ public boolean authenticate(Connection connection, UserInfo userInfo, String username, String password) { if (userInfo == null) { return false; } String md5password = DigestUtils.md5Hex(password); if (!md5password.equalsIgnoreCase(userInfo.getPassword())) { return false; } return true; } }

Welche Klasse für die Server-Authentifizierung verwendet werden soll, wird durch die Variable de.winstrom.auth.AuthSimple in der Datei flexibee-server.xml bestimmt.

Zusätzliche Dateien müssen dem Klassenpfad hinzugefügt werden. Unter Linux können Sie dies beispielsweise tun, indem Sie die Datei /etc/default/flexibee bearbeiten und die Variable CLASSPATH hinzufügen:

export CLASSPATH="pfad/k/bibliotheken-1.0.jar:pfad/k/auth.jar"
Hat dies Ihre Frage beantwortet?