Skip to content

Functions SmartUserAuth

Florian Fehring edited this page Oct 5, 2026 · 1 revision

Absicherung einer REST-Schnittstelle

Durch Einbinden der SmartUserAuth Bibliothek kann die Annotation @SmartUserAuth verwendet werden. Diese wird an die Methode einer REST-Schnittstelle geschrieben, welche abgesichert werden soll. Danach werden die Anfragen an diese Methode vom AuthentificationFilter abgefangen. Dieser Prüft mittels einer Anfrage an die REST-Schnittstelle GET /smartuser/userrights/ unter Angabe des Pfades der Resource (Pfad der aufgerufenen REST-Schnittstelle), unter der durchgefühten Aktion (GET, POST,...) ob der derzeit angemeldete Benutzer (Ermittelt über das Authtoken-Cookie) das Recht zum Zugriff besitzt.

Recht auf einzelne Datensätze bei Verwendung von listen-Schnittstellen

Bei Schnittstellen, die eine Liste von Resourcen (z.B. Datensätzen) zurückliefern, wird zunächst das Recht auf die Verwendung der gesamten Datensätze geprüft. Liegt dieses Recht nicht vor, wird der AuthentificationFilter eine Anfrage an die REST-Schnittstelle /smartuser/userrights/list senden, unter Angabe der Resource, der gewünschten Aktion und des Authtokens des angemeldeten Benutzers. Die Schnittstelle antwortet mit einer Liste aller untergeordneten Resourcen (Datensätze) auf die der Benutzer eine entsprechende Bereichtigung besitzt. Für den angemeldeten Benutzer wird ein SmartPrincipal Objekt angelegt, das in den RequestContextIniitiert wird. Die Rechte werden in dem Attribut "contextRights" des SmartUserPrincipal und die Ids zu Datensätzen in das Attribut "contextIds" gespeichert. Dieses Benutzerobjekt kann innerhalb der REST-Schnittstellen Implementierung der Anwendung wie folgt abgefragt werden:

  1. In der Methode den Parameter @Context ContainerRequestContext requestContext hinzufügen
  2. Über den requestContext.getSecurityContext() den Sicherheitskontex abfragen und daraus den Principal

Die Liste der Ids kann dann zur erweiterten Prüfung des Zugriffsrechts verwendet werden.

SecurityContext sc = requestContext.getSecurityContext();
if (sc != null) {
   SmartPrincipal sp = (SmartPrincipal) sc.getUserPrincipal();
   if (sp != null) {
      for (Long curSet : sp.getContextRight().getIds()) {
          // curSet is number of set the user has access right to
      }
   }
}

Automatische Rechtevergabe

Legt ein Benutzer eine neue Resource an (dies kann ein Datensatz, eine Tabelle oder ein sonstiges Objekt sein) wird mittels des OwnershipFilter automatisch der Pfad zur angelegten Resource erstellt und dem Benutzer das -Recht darauf eingeräumt. Hat der Benutzer bereits ein Recht auf eine übergeordnete Resource, wird keine separate Berechtigung erstellt. Rechte werden über die REST-Schnittstelle POST /smartuser/userrights/ angelegt. Dabei werden Benutzername (oder Authtoken) des angemeldeten Benutzers, Pfad der Resource, Art der Erlaubten Aktion () und ein Apptoken übertragen. Das Apptoken ist ein Authtoken das die Anwendung identifiziert.

Hinweise:

  • Das Recht, ob der Benutzer die Berechtigung besitzt ein neues Objekt anzulegen, wird zuvor über den AuthentificationFilter geprüft.
  • Benutzern sollte nicht das Recht eingeräumt werden, Rechte anzulegen, daher wird der Apptoken verwendet.

Konfiguration der Drittanwendung

Damit das SmartUserAuth die Berechtigung prüfen kann, ist eine Konfiguration notwendig. Diese wird aus der Datei [DeployName]_config.properties gelesen und umfasst die beiden folgenden Werte:

Eintrag Beschreibung
smartuser.url URL zur SmartUser REST-API
smartuser.apptoken APP-Token, wie es beim Applikationsnutzer in der SmartUser Datenbank steht

Beispiel:

smartuser.url = http://localhost:8080/SmartUser/smartuser
smartuser.apptoken = s83hs83zhh283h1h3818

Clone this wiki locally