NEWS
simple-api mit Benutzerauthentifizierung
-
Seit JS-Controller 2.x funktioniert mein eingeschränkter Benutzer für simple-api requests nicht mehr um Objekte zu lesen oder schreiben.
Einstellungen des Adapters:
Mein User (apiuser) ist in der Gruppe (api_and_web). Diese Gruppe darf Objekte und Zustände Lesen und Schreiben.
Das boolesche Objekt welches ich steuern möchte hat als Besitzer diese Gruppe.
Beispiel URLs wären:
http://ip:port/getPlainValue/javascript.0.Objects.Door_Window.Gate_Switch?user=apiuser&pass=****** http://ip:port/set/javascript.0.Objects.Door_Window.Gate_Switch?value=true&user=apiuser&pass=****** http://ip:port/set/javascript.0.Objects.Door_Window.Gate_Switch?value=false&prettyPrint&user=apiuser&pass=******
Leider erhalte ich seit dem JS-Controller Update nur noch diese Ausgabe im Browser:
error: permissionError
Im Log (Level Debug) landet leider nichts brauchbares:
@crycode Da genau das bei dir ja anscheinend funktioniert, wäre es toll wenn du mal Screenshots deiner Einstellungen zum Vergleich zeigen könntest.
Gleiche Bitte geht ebenso an alle anderen, die simple-api 2.3.2 mit nicht-admin User und Authentifizierung per URL Parameter verwenden.
-
Hier mein Setup:
js-controller 2.1.0
simple-api 2.3.2API-Nutzer: homepi (system.user.homepi) in der Gruppe Benutzer (system.group.user) mit folgenden Rechten:
Als Datenpunkt schreibe ich einen Text in
custom.0.telegram-send
mit diesen Rechten:
Die URL sieht bei mir so aus:
https://host:port/setValueFromBody/custom.0.telegram-send?user=homepi&pass=******
Beispielaufruf mit cURL:
curl -k --data "Der Text" "https://host:port/setValueFromBody/custom.0.telegram-send?user=homepi&pass=******"
Scheint soweit alles zu funktionieren.
-
Danke @crycode. Was ich bei dir gar nicht verstehe ist dass dein Objekte noch komplett Admin und Administrator gehört.
Das hatte ich früher auch so und da ging es nie. @apollon77 machte mich dann auf den Fehler der nicht korrekten Gruppe aufmerksam. Ich sehe aber gerade dass du den letzten Haken für "Jeder darf Schreiben" aktiviert hast.Als ich simpl-api nun mal als Erweiterung für web.0 aktiviert hatte und mich per Browser Login authentifiziert hatte, erhielt ich diese Fehlermeldung:
File javascript.0.Objects.Door_Window.Gate_Switch not found: permissionError
Als web.0 Erweiterung ist aber keine Authentifizierung per URL Parameter möglich.
Dann habe ich nochmal eine neue Gruppe erzeugt und es mal mit einem Objekt außerhalb von javascript.0 probiert was erstaunlicherweise funktionierte. Danach funktioniert nun vorerst auch mein Objekt unterhalb von javascript.0 aber bisher nur lesend.
Wenn ich wie @crycode den Hakeb für "jeder darf schreiben" beim Objekt setze, dann funktioniert es bei mir auch mit /set URLs. Aber das ist unlogisch wenn die Gruppe schon schreiben darf und das Objekt auch der Gruppe gehört.
@apollon77 Warum muss dann "jeder" schreiben dürften? -
@Diginix sagte in simple-api mit Benutzerauthentifizierung:
Wenn ich wie @crycode den Hakeb für "jeder darf schreiben" beim Objekt setze, dann funktioniert es bei mir auch mit /set URLs. Aber das ist unlogisch wenn die Gruppe schon schreiben darf und das Objekt auch der Gruppe gehört.
Das sollte das Problem doch schon mal eingrenzen.
Bei mir läuft simple-api nicht als web.0 Erweiterung sondern einzeln. Ich kann mich noch dunkel erinnern, dass bei meiner Einrichtung der simple-api damals irgendwas mit http nicht funktionierte, weshalb ich dann https aktiviert hatte. Was das genau war bekomm ich grad aber leider nicht mehr zusammen.
-
@crycode Läuft bei mir auch nicht als web.0 Erweiterung weil sonst die Authentifizierung nicht per URL Parameter funktioniert. Hab nur im Test mal alle Einstellungen durchprobiert.
Mit dem Haken für "jeder darf schreiben" bei meinem Objekt kann ich vorerst leben.
Aber da scheint doch ein Bug drin zu sein wenn die Gruppe, die es eigentlich darf, es doch nicht darf. -
@Diginix Frage: "Reicht jeder darf lesen"?
-
Ich glaube ich habe nun die Lösung und es ist kein Bug.
Die Gruppe muss zusätzlich "list" als Berechtigung für Zustand und Objekt erhalten seit JS-Controller 2.x
Hatte @apollon77 mir auch schon mal als Tipp gegeben. Nach Änderungen der Gruppenrechte muss aber die simple-api Instanz jedes mal neu gestartet werden damit die Änderungen auch greifen. Das hatte ich bisher nicht gewusst.
-
@Diginix Aahh das kann sein. Ja müssen dringend das rechtekram mal Dokumentieren.
Bzw würdest du mal (gern hier als Post oder so) mal für einen User der so eine user Einstellung mag wie du das mal zusammenschreiben was wie und warum gesetzt sein muss ?! Dann würde ich das als Grundlage mal nehmen für sowas.
-
Bzw zusätzlich (grad nachgedacht) wäre ggf ein Admin issue sinnvoll mit „was sollte wann automatisch im rechte Dialog gesetzt werden wenn man was will“. Wie „Objekt read und list muss an sein wenn state * gewollt ist “ oder so ... das andere User da gar nicht rein rennen ?!
Hast du da Ideen?
-
@apollon77
Ich überlege mal. Aber für den Anfang würde es reichen in der github Anleitung von simple-api vllt 1-2 konkrete Beispiele zu dokumentieren. Mit allem was eben auch bei der Nutzerverwaltung dazu gehört.
Komfort Features wären schön, aber kosten Entwicklung und da es ja prinzipiell funktioniert, wäre diese Zeit an anderen Stelle für wirklich neues oder Bugfixing sinnvoller. -
@Diginix Da du so ein Setup live hast wäre cool wenn du mir da input geben könntest (wenn Du magst und Zeit hast) ... Dann packe ich es da rein
-
@apollon77 Ja, das kriegen wir hin. Ich schreib da mal was zusammen mit Screenshots der entscheidenden Bereiche.
-
Cooool Thx!
Poste es hier im Forum, dann ists direkt MDund ich kann es einfacher in die Doku übernehmen
-
@Diginix Hast du das jetzt irgendwo dokumentiert? Habe auch totale Probleme mit der Authentifizierung von Simple-api diese läuft bei mir auch getrennt (eigenständig) vom Web.0
Ich bekomme als an neu angelegter Benutzer und Gruppe nicht hin. Das mit "Jeder schreiben" habe ich noch nicht benutzt wenn ich das richtig verstanden habe wird das nicht benötigt oder?
-
@xxxspxxx Ich habe mir alles lokal in einem Gedächtnisprotokoll gespeichert um daraus mal einen Auszug für eine Anleitung zu schreiben. Bisher ist das mangels Zeit nicht geschehen. Doku schreiben mag wahrscheinlich niemand.
Hier mal meine Stichpunkte:
- Objekt gehört Gruppe oder dem Nutzer oder alle dürfen es lesen/schreiben
- Gruppe hat mind. lesen, list, schreiben
- Verwendeter Benutzer ist in der Gruppe dem das Objekt gehört oder ist Besitzer vom Objekt
- simple-api Instanz muss neu gestartet werden wenn Berechtigungen angepasst wurden
- Für Authentifizierung per URL Parameter muss der separate simple-api Adapter genutzt werden, nicht die eingebaute vom web Adapter
- Benutzername und Passwort darf keine Großbuchstaben enthalten
Vielleicht hilft dir das schon. Ansonsten poste mal Screenshots der Gruppe, dem User und den Berechtigungseinstellungen vom Objekt, welches gelesen/geschrieben werden soll.
-
Krass schnelle Antwort :=) Danke
Also deine Bedingungen habe ich alle auch so gesetzt.Glaube ich hatte alles richtig haben aber beim Login-namen einen Großbuchstaben benutzt. Kann das sein? Habe gerade aus frust einfach mal test und pw auch test1 angelegt und dann ging es sofort?
-
@xxxspxxx Ok, bei mir war glaub immer alles klein geschrieben. Kannst ja noch mal die Gegenprobe machen und berichte.
Sicherheitshalber immer die simple-api Instanz neustarten.
Sollte die Schreibweise relevant sein bzw mit Großbuchstaben Probleme machen, würde ich diesen Punkt mit aufnehmen. -
Ja habe ich sofort überprüft. Vielleicht machst du das kurz auch bei dir noch als gegenprobe. Glaube unter Linux gibt es keine Großbuchstaben bei Benutzernamen und hostnamen? Vielleicht ist es extra so. Http login geht aber halt mit dem Benutzer. TestTestUser den ich soeben nochmal angelegt habe.
-
@xxxspxxx Ich kann es bestätigen. Großbuchstaben im Nutzernamen führen zu einem "permission error", auch wenn der user richtig geschrieben per URL Parameter übergeben wird.
Kann sein dass es ein Bug ist, aber für den Moment kann man das Problem ja durch Verwendung von ausschließlich Kleinbuchstaben für user+pass umgehen. -
@Diginix Bitte Issue öffnen