Erzwungene Anmeldung wird zum Standard für alle REST-Authentifizierungen

Wir haben vor kurzem eine neue Möglichkeit geschaffen, den Zugriff auf die REST-API über die Privilegien und die Funktion ds.authentify zu kontrollieren: Anmeldung erzwingen. Diese Funktion bietet viel mehr als die bisher verfügbaren Authentifizierungsmechanismen und wurde in diesem Blog-Beitrag ausführlich erläutert.

Mit 4D 20 R6 ist Force Login nun der Standardmodus für REST-Authentifizierungen. Sie fragen sich, warum und wie Sie mit dieser Umstellung umgehen sollen? Lesen Sie diesen Beitrag weiter.

Standard in neuen Projekten

Wenn Sie ein Projekt in 4D 20 R6 erstellen, wird automatisch eine roles.json Datei im Sources Ordner erstellt. Diese Datei enthält das Attribut forceLogin, das auf„True“ gesetzt ist, und ein„none„-Privileg, das standardmäßig den Zugriff auf die gesamte REST-API verweigert.

Dieser Ansatz gewährleistet von vornherein ein hohes Maß an Sicherheit.

Sie können die Berechtigungen anpassen, indem Sie die mitgelieferte Datei roles.json bearbeiten oder den Editor für Rollen und Berechtigungen von Qodly Studio verwenden, um die Benutzerfreundlichkeit zu erhöhen.

Sie sind nun in der Lage, den REST-Zugriff auf Ihre Daten und Funktionen genau zu steuern!

Was ist mit bestehenden Projekten?

Für bestehende Projekte gibt es im Dialog Struktureinstellungen auf der Registerkarte Web/Web Features eine neue Schaltfläche, mit der Sie Ihr Projekt auf Force Login umstellen können.

Wenn Sie auf diese Schaltfläche klicken, wird 4D:

  • Die Gruppe der Benutzer mit Lese-/Schreibzugriff auf die REST API aus den Einstellungen entfernen.
  • Verschieben Sie die Datenbankmethode „On REST Authentication“ in die Systemmülltonne.
  • Erstellen Sie eine Datei „roles.json“ im Ordner Sources, falls sie noch nicht vorhanden ist, und setzen Sie das Attribut forceLogin auf True.

 

Denken Sie daran, Ihr Projekt nach dieser Konvertierung neu zu starten. Wenn die Schaltfläche nicht angezeigt wird, ist Ihr Projekt bereits mit Force Login kompatibel.

Umstellung von Legacy-Einstellungen

Bis zur Einführung von Force Login standen Ihnen drei Optionen für die REST-Zugangskontrolle zur Verfügung. Im Folgenden erklären wir Ihnen, wie Sie alle diese Optionen nachahmen können, wenn Force Login aktiviert ist.

In diesen Beispielen verwenden wir ein „Administrator“-Privileg, das im Editor für Rollen und Privilegien von Qodly Studio erstellt wurde: blank

1: Server als Rest ohne Zugriffsgruppe FREIGEBEN

Die erste Option bestand darin, den REST-Server freizugeben, ohne eine Zugriffsgruppe zu definieren oder die Anfragen in der Datenbankmethode „On REST Authentication“ zu filtern.
Um dieses Verhalten mit Force Login zu reproduzieren, müssen Sie einfach vollen Zugriff auf die gesamte REST-API gewähren:

Class extends DataStoreImplementation
exposed Function authentify() : Boolean
return Session .setPrivileges("Administrator")

Beachten Sie, dass diese Implementierung nicht empfohlen wird, da sie nicht sicher genug ist. Alle Daten und Funktionen sind für jeden zugänglich.

2: Server als Rest mit definierter Zugriffsgruppe FREIGEBEN

Die zweite Möglichkeit besteht darin, eine Gruppe von 4D Benutzern mit Lese-/Schreibzugriff auf die REST API zu definieren.
Um dieses Verhalten zu reproduzieren, überprüfen Sie einfach die Anmeldedaten und geben Sie den Mitgliedern der Gruppe „Lesen/Schreiben“, die im Dialogfeld „Struktureinstellungen“ definiert wurde (in diesem Beispiel die Gruppe „RestAccess“), vollen Zugriff:

Class extends DataStoreImplementation
exposed Function authentify($identifier: Text; $pwd: Text) : Boolean
If ($identifier#"")
If (Validate password($identifier; $pwd)
If (User in group($identifier; "RestAccess"))
return Session .setPrivileges("Administrator")
End if
End if
End if

Diese Einschränkung sichert den Datenzugriff und die Funktionen gegen böswillige Verbindungen. Jede autorisierte Verbindung hat die gleichen Rechte.

3: Authentifizierungsmethode im Ruhezustand

Die dritte Option war die Überprüfung der Benutzeranmeldeinformationen mit der Datenbankmethode „On REST Authentication“. Diese Methode wurde häufig verwendet, um Zugriffe von einem benutzerdefinierten Benutzerverwaltungssystem zu überprüfen. Um dieses Verhalten zu reproduzieren, können Sie den Code der Methode „On REST Authentication“ quasi in die Funktion ds.authentify() kopieren, wie in diesem Beispiel.

Die ursprüngliche „On REST Authentication“-Methode:

#DECLARE($identifier: Text; $pwd: Text) : Boolean
If ($identifier#"")
var $user : cs.UserEntity:=ds.User.query("identifier = :1"; $identifier).first()
If ($user#Null)
If (Verify password hash($pwd; $user.pwd))
return True
End if
End if
End if

Die ersetzende Funktion „ds.authentify()“:

Class extends DataStoreImplementation
exposed Function authentify($identifier: Text; $pwd: Text) : Boolean
If ($identifier#"")
var $user : cs.UserEntity:=ds.User.query("identifier = :1"; $identifier).first()
If ($user#Null)
If (Verify password hash($pwd; $user.pwd))
return Session.setPrivileges("Administrator")
End if
End if
End if

Wie bei der vorherigen Option hat jede autorisierte Verbindung die gleichen Rechte; der Zugriff auf Daten und Funktionen muss von Ihnen selbst kodiert werden.

Nächste Stufe

Die Stärke von Force Login besteht darin, dass Sie dieselbe Geschäftslogik und dieselben Einschränkungen wie bei REST-Verbindungen anwenden können. Dies gilt insbesondere für Anfragen von Qodly Pages, Remote Datastore-Verbindungen oder externe REST-Anfragen.
Im folgenden Beispiel wird bei der Authentifizierung des Benutzers nicht das Privileg „Administrator“ definiert, sondern einfach die in der Benutzerentität gespeicherten Privilegien festgelegt. Auf diese Weise können Sie den Zugriff auf den Datenspeicher, die Datenklassen, die Datenklassenattribute und die Funktionen, die Sie wünschen, fein abstufen und den Rest einschränken!

Class extends DataStoreImplementation
exposed Function authentify($credentials: Object) : Boolean
If ($credentials#Null)
var $user : cs.UserEntity:=ds.User.query("identifier = :1"; $credentials.identifier).first()
If ($user#Null)
If (Verify password hash($credentials.pwd; $user.pwd))
return Session.setPrivileges($user.privileges)
End if
End if
End if

 

FAZIT

Force Login bietet eine genaue Kontrolle über den Zugriff auf Ihre Daten und Funktionen über die REST-API. Es ermöglicht Ihnen, die Zugriffslogik aus dem Code in definierte Berechtigungen zu verlagern und so Codeversehen beim Zugriff zu vermeiden und ein zuverlässigeres Sicherheitsniveau zu bieten. Diese integrierte Sicherheitsebene ist viel präziser, da Sie die Berechtigungen für jedes Datenspeicherelement (Datenspeicher selbst, Datenklassen, Datenklassenattribute, Funktionen) definieren und jedem dieser Elemente Rechte (Erstellen, Lesen, Aktualisieren, Löschen usw.) zuweisen können.
Definieren Sie Ihre Berechtigungen und nutzen Sie den Editor für Rollen und Berechtigungen in Qodly Studio für eine verbesserte Erfahrung.
Teilen Sie Ihr Feedback zu dieser Funktion in den 4D Foren mit!

Avatar
- Product Owner - Damien Fuzeau ist seit Februar 2019 Mitglied des 4D Produktteams. Als Product Owner ist er für das Schreiben von User Stories zuständig, die er dann in funktionale Spezifikationen umsetzt. Zu seinen Aufgaben gehört es auch, dafür zu sorgen, dass die gelieferten Funktionsimplementierungen den Anforderungen der Kunden entsprechen. Damien hat an der Universität von Nantes einen Abschluss in Softwaretechnik gemacht. Er verbrachte mehr als 23 Jahre in seinem früheren Unternehmen, zunächst als Entwickler (er entdeckte 4D im Jahr 1997) und später als technischer Leiter und Softwarearchitekt. Dieses Unternehmen ist ein 4D OEM Partner und hat 4D basierte Geschäftssoftware für Tausende von Usern auf Hunderten von Servern eingesetzt. Damien ist also mit der Entwicklung und dem Einsatz von 4D in einem mehrsprachigen Kontext vertraut.