[Gelöst]FHEMWEB mehrere Benutzer mit base64, wie korrekte perl syntax

Begonnen von Rewe2000, 30 August 2020, 13:40:31

Vorheriges Thema - Nächstes Thema

Rewe2000

Hallo,

ich wollte eben noch einen zweiten Benutzer für WEBtablet anlegen, klappt im Klartext prima mit:
set WEBtablet basicAuth { "$user:$password" eq "Benutzer1:Geheim1" || "$user:$password" eq "Benutzer2:Geheim2" }

versuche ich aber das Gleiche mit base64, so klappt das nicht, kein User wird akzeptiert:
set WEBtablet basicAuth { "$user:$password" eq "QmVudXR6ZXIxOkdlaGVpbTE=" || "$user:$password" eq "QmVudXR6ZXIyOkdlaGVpbTI=" }

Gibt es da nur einen syntaxfehler oder ist das Problem woanders?
Der Schlüssel aus base64 enthält doch $user und $password oder liege ich da falsch?

Sicher kann ich den zweiten Zugang über eine weiteres WEB Device mit einem extra Port lösen, aber eigentlich müsste es ja auch über ein einziges klappen.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

amenomade

"$user:$password" enthält immer noch nach der Anmeldung  "Benutzer1:Geheim1" und nicht "QmVudXR6ZXIxOkdlaGVpbTE="
Du vergleichst ein nicht verschlüsseltes String mit einem verschlüsselten

Ggf wäre encode_base64("$user:$password") mit QmVudXR6ZXIxOkdlaGVpbTE= besser vergleichbar.

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Rewe2000

Hallo amenomade,

irgendwie jetzt logisch, da habe ich Äpfel mit Birnen verglichen.

Ich dachte am einfachsten verstehe ich die Funktion, durch ein kleines Perl Programm, obwohl es (für mich) gut aussieht, ist das Ergebnis nicht so wie erhofft, der Vergleich wird nicht wahr.

Das Miniaturprogramm:

# Header für Perlprogramm
use strict;
use warnings;
use MIME::Base64;
#!/usr/local/bin/perl -w

my $user;
my $pasword;
$user = "Benutzer1";
$pasword = "Geheim1";
print "Zeile 1: $user:$pasword\n";
print "Zeile 2: ";
print encode_base64("$user:$pasword");
if (encode_base64("$user:$pasword") eq "QmVudXR6ZXIxOkdlaGVpbTE=") {
print "Zeile 3: Kennwort ist wahr";
}else{
print "Zeile 3: Kennwort ist falsch";
}


Das Ergebnis:

Zeile 1: Benutzer1:Geheim1
Zeile 2: QmVudXR6ZXIxOkdlaGVpbTE=
Zeile 3: Kennwort ist falsch


Ich will es verstehen, weshalb es nicht funktioniert, wäre schön wenn mir da noch jemand einen Tipp geben könnte.
Macht da eventuell das "=" Zeichen im Codestring Probleme?

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

amenomade

#3
encode_base64("$user:$pasword","") sonst wird \n am Ende hinzugefügt (das siehst Du in deiner Ausgabe: Du hast kein \n nach Zeile2, und trotzdem kommt Zeile 3 daunten). Siehe $eol in  https://perldoc.perl.org/MIME/Base64.html
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

juemuc

Hallo zusammen,
ich habe für einen zweiten User einfach einen zweiten Port definiert. Dann kann man diesem User auch geziehlt Räume zuordnen.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

amenomade

Ein 2. "allowed" Device würde reichen, statt ein 2. FHEMWEB
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Rewe2000

Hallo amenomade,

genau das "end of line" war mein Fehler, jetzt klappt auch mein Perl Testprogramm und der Vergleich meldet wahr.
Übertrage ich den gleichen Percode jedoch in allowed, so klappt die Anmeldung nicht, selbst bei einem User, im Log steht "Login denied".
attr allowed_WEBphone basicAuth encode_base64("$user:$password","") eq "QmVudXR6ZXIxOkdlaGVpbTE="
$user = "Benutzer1"
$password = "Geheim1"

Ich habe hier eine anderes WEB Device mit einem anderen Port gewählt, damit ich mich bei diesen Experimenten nicht selbst aussperre.
Sollte dies grundsätzlich so funktionieren oder verseckt sich da noch irgendein Fehler bei mir?

@juemuc: Jürgen, ich habe dies bisher genau so gemacht, da ich aber 3 gleichberechtigte User habe, wollte ich den Weg über ein Web Device wählen. Sollte das so nicht klappen, werde ich mal versuchen nur 3 allowed Devices auf ein WEB Device aufzusetzen.

Aber bei manchen Sachen entwickelt man eine ungeheuere Ausdauer (und nervt viele andere damit ;)) bis es endlich klappt.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

rudolfkoenig


Rewe2000

Hallo Rudi,

danke für den Hinweis, kaum schreibt man die Syntax richtig, schon funktioniert es so wie es soll.

attr allowed_WEBphone basicAuth { encode_base64("$user:$password","") eq "QmVudXR6ZXIxOkdlaGVpbTE=" || encode_base64("$user:$password","") eq "QmVudXR6ZXIyOkdlaGVpbTI=" }

Die Anmeldung an einem WEB Device funkltioniert nun mit 2 Usern problemlos.

Danke für eure Tipps
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky