Systembenutzer
Der Systembenutzer ist ein Systemobjekt in ThingWorx, das die Verwaltung interner Dienstberechtigungen vereinfachen soll, während die Berechtigungen für die externe API-Schicht weiterhin auf Benutzerbasis gewährt werden können. Der Systembenutzer ist optional. Wenn der Systembenutzer einem Dienst nicht zugewiesen ist, prüft ThingWorx die Berechtigungen des Benutzers, der die ursprüngliche Anforderung ausgegeben hat, für alle nachfolgenden eingebundenen Dienste.
Wenn ein Benutzer einen Dienst aufruft, muss dieser Benutzer normalerweise die Berechtigung für den aufgerufenen Dienst sowie Berechtigungen für alle anderen Dienste haben, die aus dem ursprünglich aufgerufenen Dienst aufgerufen werden. Beispielsweise führt ein Benutzer einen Dienst namens GetMachineRunTimeHistory auf einem Ding aus, das intern QueryStreamEntriesWithData und GetDataTableEntryByKey aufruft. Ohne den Systembenutzer zu verwenden, benötigt der Benutzer, der GetMachineRunTimeHistory aufgerufen hat, auch explizite Berechtigungen zum Ausführen von QueryStreamEntriesWithData und GetDataTableEntryByKey.
Wenn ein benutzerdefinierter Dienst aus einem Dienst oder Abonnement von einem Systembenutzer aufgerufen wird (eingebundener Dienstaufruf) und der Systembenutzer den Dienst ausführen darf, darf der Dienst unabhängig vom Benutzer ausgeführt werden, der die Sequenz von Ereignissen, Skripts oder Diensten ursprünglich ausgelöst hat. Der Benutzer kann jedoch nicht direkt den eingebundenen Dienst selbst aufrufen (im Beispiel oben: QueryStreamEntriesWithData oder GetDataTableEntryByKey, es sei denn der Benutzer hat explizit die Berechtigung).
Diese Vorgehensweise ermöglicht es einem Administrator, extern zugängliche Oberflächen-APIs mithilfe von Benutzern und Gruppen mit expliziter Zugriffsaktivierung zu sperren. Während es immer empfohlen wird, Benutzerpropagierung zum Einbinden von Dienstaufrufen zu verwenden, kann der Systembenutzer die Verwaltung interner Dienstaufrufe aus Berechtigungsverwaltungsperspektive vereinfachen.
Der Systembenutzer kann zur Administratorgruppe hinzugefügt werden. Dadurch erhalten alle Benutzer die vollständige Berechtigung für alle in einem Dienstaufruf verschachtelten Elemente. Alle Dienste, die in einem benutzerdefinierten Dienst aufgerufen werden, sind erfolgreich, unabhängig von den Berechtigungen des aufrufenden Benutzers.
Der Systembenutzer erweitert die Sichtbarkeit eines Benutzers nicht, wenn er Dinge abfragt. Der Systembenutzer kann nicht verwendet werden, um Dinge abzurufen, für die ein Benutzer keine Sichtbarkeitsberechtigung hat. Sehen Sie sich das folgende Beispiel an, das dies veranschaulicht:
1. Es gibt fünf Dinge, D1, D2, D3, D4, D5, die die Dingvorlage Vorlage1 erben, und es gibt zwei Benutzer, Benutzer1 und Benutzer2.
2. Benutzer1 hat die Sichtbarkeitsberechtigung für D1 und D2 und Benutzer2 hat die Sichtbarkeitsberechtigung für D4 und D5.
3. Die Dienstausführungsberechtigung wird dem Systembenutzer für QueryImplementingThings für Vorlage1 gewährt, und ein benutzerdefinierter Dienst namens CallQueryImplementingThings wird erstellt, der intern QueryImplementingThings aufruft und die Dienstausführungsberechtigung für Benutzer1 und Benutzer2 für den Dienst CallQueryImplementingThings bereitstellt.
4. Wenn Benutzer1 den Dienst CallQueryImplementingThings ausführt, werden D1 und D2 im Ergebnis angezeigt.
5. Wenn Benutzer2 den Dienst CallQueryImplementingThings ausführt, werden D4 und D5 im Ergebnis angezeigt.
|
Der Systembenutzer sollte nicht verwendet werden, um Sicherheitsmaßnahmen zu umgehen oder sich das sorgfältige Entwerfen und Implementieren einer sicheren Anwendung zu ersparen. Als optimale Vorgehensweise gilt, den Systembenutzer nur in besonderen Anwendungsfällen einzusetzen und nicht als allgemeinen Workaround für Benutzerpropagierungsverfahren zu verwenden.
|
Systembenutzer-Beispiel
Wenn dem Systembenutzer die Berechtigung zum Ausführen eines Diensts gewährt wird, bedeutet dies, dass jeder Benutzer zum Ausführen dieses Diensts in einem benutzerdefinierten Dienst berechtigt ist, aber nicht notwendigerweise zum direkten Aufrufen dieses Diensts. So verwenden Sie ihn ordnungsgemäß:
1. Gewähren Sie dem Systembenutzer die Berechtigung zum Ausführen eines Diensts, schränken Sie jedoch die Berechtigungen dieses Diensts so ein, dass andere Benutzer keine Berechtigung zum Ausführen dieses Diensts haben.
2. Schreiben Sie einen benutzerdefinierten Dienst, der diesen eingeschränkten Dienst aufruft, und gewähren Sie dann Benutzern die Berechtigung, den benutzerdefinierten Dienst, aber nicht den eingeschränkten Dienst auszuführen.
3. Die Benutzer können diesen benutzerdefinierten Dienst ausführen, auch wenn sie nicht über die Berechtigung zum Ausführen des eingeschränkten Diensts verfügen.
Um dieses Konzept anhand eines Beispiels weiter zu veranschaulichen, betrachten Sie den folgenden Anwendungsfall:
Sie möchten einen benutzerdefinierten Dienst schreiben, der Benutzern den Status eines bestimmten verbundenen Geräts mit der Bezeichnung CustomService1 anzeigt. Hierzu kann CustomService1 den SearchDevices-Dienst für die DeviceFunctions-Ressource verwenden, um nach allen Geräten auf der Plattform zu suchen und dann die Ergebnisse so zu filtern, dass nur das bestimmte Gerät zurückgegeben wird.
Berechtigungen werden jedoch nicht nur für CustomService1 überprüft, sondern auch für jeden Dienstaufruf innerhalb von CustomService1. Der Benutzer benötigt die Berechtigung zum Ausführen des SearchDevices-Diensts, um CustomService1 erfolgreich aufrufen zu können; andernfalls schlägt der Aufruf von CustomService1 fehl. Dem Benutzer die Berechtigung zum Aufrufen von SearchDevices zu gewähren, ist jedoch nicht ideal, da der Benutzer möglicherweise keinen Zugriff auf den Status jedes Geräts haben soll, sondern nur des bestimmten Geräts.
Der Systembenutzer kann dieses Problem lösen. Wenn ein Dienst direkt ausgeführt wird, werden die Berechtigungen des betreffenden Benutzers geprüft, um zu ermitteln, ob er über die erforderliche Berechtigung verfügt. Dies gilt für alle Dienste, einschließlich aller benutzerdefinierten Dienste. Wenn ein Dienst jedoch aus einem benutzerdefinierten Dienst heraus ausgeführt wird, werden tatsächlich zwei Berechtigungen geprüft: die Berechtigung des Benutzers und die Berechtigung des Systembenutzers. Wenn der Benutzer oder der Systembenutzer zum Ausführen des Diensts innerhalb des benutzerdefinierten Diensts berechtigt ist, wird der enthaltene Dienst so ausgeführt, als wäre der Benutzer zum Ausführen berechtigt. Da SearchDevices nur innerhalb von CustomService1 und nicht direkt aufgerufen wird, können Sie dem Systembenutzer die Berechtigung zum Ausführen von SearchDevices erteilen. Wenn der Benutzer CustomService1 aufruft, werden die Berechtigungen geprüft, und es wird festgestellt, dass User1 nicht berechtigt ist, aber auch, dass der Systembenutzer über die erforderliche Berechtigung verfügt. Anschließend wird SearchDevices ausgeführt, als ob der Benutzer dazu berechtigt wäre. Sollte der Benutzer einmal versuchen, SearchDevices direkt aufzurufen, ohne den Dienst aus CustomService1 heraus aufzurufen, gilt die Berechtigung des Systembenutzers nicht, und dem Benutzer wird die Berechtigung verweigert.