<div dir="ltr">Hi Michael,<div><div class="gmail_extra"><br><div class="gmail_quote">Am 19. März 2018 um 22:44 schrieb Michael Koch <span dir="ltr"><<a href="mailto:princemichi@gmail.com" target="_blank">princemichi@gmail.com</a>></span>:</div><div class="gmail_quote"><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF">
    Ich erhoffe mir, das die Urheber der Auth-Funktionen alle Parameter
    in der Config einmalig odentlich beschreiben:<br></div></blockquote><div><br></div><div>

<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">ich mach mal einen Versuch, bin aber wie gesagt kein Urheber, sondern nur Alpha- oder Betatester.</span></div><div> 
 </div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF">
    a) Erläuterungen Firewall: Was ist ips, methods, action und wie
    wirken diese zusammen.<br></div></blockquote><div><br></div><div>Die beiden 'ips'-Blöcke sorgen dafür, dass Requests von localhost und aus dem lokalen Netzwerk durchgelassen werden.</div><div><br></div><div>'methods' filtert nach HTTP-Methoden. VZ benutzt GET/POST/PUT/DELETE (siehe API-Referenz). Die Beispielkonfig [ 'methods' => 'GET', 'action' => 'allow' ] sorgt dafür, dass Lesezugriff von extern ohne Login möglich ist. Wer das nicht will, ändert 'allow' auf 'auth' oder löscht den Block komplett, dann gilt ebenfalls 'auth' wie für alle übrigen Requests (letzter Block).</div><div><br></div><div>Als 'action' sind 'allow', 'auth' und 'deny' zulässig. Das ist wohl selbsterklärend.    </div><div> </div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF">b) Was muss ich einstellen, wenn ich z.B. einem bestimmten Client
    zulassen möchte ... z.B. erläutert durch verständliche
    Anwendungsfälle.<br></div></blockquote><div><br></div><div>Wenn sich der Client außerhalb des internen Netzes befindet, und die verwendete Methode mit "auth" konfiguriert ist (z.B. POST für einen Logger), muss er sich mittels Token im HTTP-Header authentifizieren. Ein Browser besorgt sich dieses Token beim ersten Zugriff auf das Frontend mittels User/Password und legt es zur weiteren Verwendung in den Cookies ab.</div><div>Weil der Logger das nicht kann, muss das Token auf dem Server generiert werden und der Logger so konfiguriert werden, dass er es in den Header der verschickten Requests einbaut.</div><div><br></div><div>Mit curl geht das z.B. so: <span class="gmail-il" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">curl</span><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> </span></span><a href="https://domain.tld/">https://domain.tld/</a><wbr>middleware.php/data/uuid.json<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> </span>--header "Authorization: Bearer <token>"</span></div><div><br></div><div>Zur manuellen Generierung von Tokens (z.B. auch mit langer Gültigkeit) gibt es misc/tools/token-helper.php</div><div>Bitte einfach mal ausprobieren und mit den Tokens aus den Browser-Cookies vergleichen. Für die Analyse von Tokens hilft ebenfalls die token-helper.php mit der Option decode oder der Debugger auf <a href="https://jwt.io/" target="_blank">https://jwt.io/</a><br></div><div><br></div><div>Neben dem verwendeten User und der Gültigkeit lassen sich bei der Erstellung von Tokens auch constraints, also Beschränkungen auf HTTP-Methoden und Kontexte berücksichtigen. Für einen Logger kann man also ein Token erstellen, bei dem nur POST auf data erlaubt ist. Also kein Lesezugriff, kein Löschzugriff und kein Zugriff auf Kanäle o.ä.. Das senkt das Risiko für den Fall, dass ein Token in falsche Hände gerät.</div><div><br></div><div>Ich zitiere mal einen Schnipsel aus einer Mail von Andreas aus der Entwicklungsphase:</div><div><br></div><div>

<div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">php misc/tools/<span class="m_4442571914691311506m_4961738038064564912gmail-m_170036550494052164gmail-il">token</span>-<span class="m_4442571914691311506m_4961738038064564912gmail-m_170036550494052164gmail-il">helper</span>.php decode $(php misc/tools/<span class="m_4442571914691311506m_4961738038064564912gmail-m_170036550494052164gmail-il">token</span>-<span class="m_4442571914691311506m_4961738038064564912gmail-m_170036550494052164gmail-il">helper</span>.php create andig --operation add --context data --valid 1.1.2019)</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><span class="m_4442571914691311506m_4961738038064564912gmail-m_170036550494052164gmail-m_-494407357277170688Apple-tab-span" style="white-space:pre-wrap"> </span>{"sub":"andig","iat":151653679<wbr>8,"exp":1546297200,"vz:ctx":"d<wbr>ata","vz:ops":"POST"}</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">

<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">In diesem Fall darf das 1 Jahr gültige<span> </span></span><span class="m_4442571914691311506m_4961738038064564912gmail-il" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Token</span><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> </span>ausschließlich “POST” auf den “/data” Kontext, also nur neue Daten anlegen aber nix löschen.</span>

<br></div>

</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF">c) Was kann ich mit $config['proxies'] einstellen? 1x auf Deutsch
    bitte ...<br></div></blockquote><div><br></div><div>Daran hab ich nie was geändert. Regelt wohl die Handhabung von Proxies im lokalen Netz (hab ich nicht).</div><div>Würde mal davon ausgehen, dass es sich um eine sinnvolle Grundeinstellung handelt, die die üblichen IP-Bereiche für lokale Netze abdeckt.  </div><div> </div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF">d) Was bewirkt $config['authorization'] ?? Auch hier benötigt man
    ein mal eine Erläuterung für das Wiki. Die Kommentare in der Config
    sind sehr "knapp".<br></div></blockquote><div><br></div><div>Naja, 'secretkey' ist das früher schon angesprochene salt für die Verschlüsselung. Weil es wenig Sinn macht, dass das öffentlich auf GitHub steht, muss es für jede Installation individuell gesetzt werden. Vielleicht sollten wir perspektivisch ein Script anbieten, dass einen bei der initialen Konfiguration der Firewall an die Hand nimmt und dort auf Wunsch ein paar zufällige Zeichen einträgt. Das secret kann ebenfalls mit dem Debugger von <a href="http://jwt.io" target="_blank">jwt.io</a> geprüft werden.</div><div><br></div><div>'valid' bestimmt die Gültigkeitsdauer der generierten Tokens in Sekunden. Nach Ablauf dieser Zeit ist im Browser ein neues Login erforderlich. Mit token-helper.php können wie erwänt Tokens mit abweichender Gültigkeit generiert werden.</div><div> </div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF">e) Ausschließlich $config['users']['plain'] ist für mich
    selbsterklärend. <br></div></blockquote><div><br></div><div>Immerhin :-) </div><div> </div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF">f) $config['users']['constraints'<wbr>] ist für mich auch noch ein Buch
    mit 7 Siegeln...</div></blockquote><div> </div><div>Das war ein Wunsch von mir, nachdem Andreas Tokens mit eingeschränkten Rechten eingeführt hatte. Für constraints gilt das oben gesagte (Methode und Kontext sind konfigurierbar).</div><div>Damit kann man z.B. einen Gastnutzer bauen, der Daten zwar anschauen, aber nicht ändern, nicht löschen und auch nicht loggen kann.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF"><p>Gerne auch mal einige Ausführungen zum konzeptionellen Aufbau und
      Funktionsweise insbesondere der Firewall Settings.</p></div></blockquote><div>Da muss ich passen. Muss man aber IMHO auch nicht kennen, um es zu verwenden. Vielleicht mal in der Doku von JWT umsehen?</div><div><br></div><div>Als Warnung sollte man vielleicht nochmal betonen, dass alles, was Authentifizierung betrifft, nur sinnvoll in einem Umfeld mit HTTPS genutzt werden kann, sonst ist es mit Sicherheit nicht weit her...</div><div><br></div><div>Viele Grüße</div><div>Frank</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF">
    <p></p><div class="m_4442571914691311506m_4961738038064564912gmail-m_170036550494052164m_8049344957580689384gmail-m_-9194640462305147477m_-8690108651556635601moz-cite-prefix"><div id="m_4442571914691311506m_4961738038064564912gmail-m_170036550494052164m_8049344957580689384gmail-m_-9194640462305147477m_-8690108651556635601rwhMsgHeader"><span><font style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Tahoma;color:rgb(0,0,0)" face="Tahoma" color="#000000"><b>From:</b> Frank Richter
            [<a class="m_4442571914691311506m_4961738038064564912gmail-m_170036550494052164m_8049344957580689384gmail-m_-9194640462305147477m_-8690108651556635601moz-txt-link-freetext" href="mailto:frank.richter83@gmail.com" target="_blank">mailto:frank.richter83@gmail.<wbr>com</a>]</font></span><br>
        <span><font style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Tahoma;color:rgb(0,0,0)" face="Tahoma" color="#000000"><b>Sent:</b>
            Monday, Mar 19, 2018 13:50 GMT+0100</font></span><br>
        <span><font style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Tahoma;color:rgb(0,0,0)" face="Tahoma" color="#000000"><b>To:</b>
            <a href="http://volkszaehler.org" target="_blank">volkszaehler.org</a> - users
            <a class="m_4442571914691311506m_4961738038064564912gmail-m_170036550494052164m_8049344957580689384gmail-m_-9194640462305147477m_-8690108651556635601moz-txt-link-rfc2396E" href="mailto:volkszaehler-users@demo.volkszaehler.org" target="_blank"><volkszaehler-users@demo.volks<wbr>zaehler.org></a></font></span><br>
        <span><font style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Tahoma;color:rgb(0,0,0)" face="Tahoma" color="#000000"><b>Subject:</b>
            [vz-users] VZ-Frontend Auth - Anmelden mit
            Zugangsberechtigungen - Hilfestellungen und Wiki-Artikel</font></span><br>
        <br>
      </div>
    </div><div><div class="m_4442571914691311506m_4961738038064564912gmail-m_170036550494052164m_8049344957580689384gmail-m_-9194640462305147477h5">
    <blockquote type="cite" style="border:none;margin-left:0px;margin-right:0px;margin-top:0px;padding-left:0px;padding-right:0px">
      <div dir="ltr">Hi Michael,
        <div><br>
        </div>
        <div>das ist eher was für die vz-dev Mailingliste.</div>
        <div><br>
        </div>
        <div>Was ist ist denn unklar bzgl. Firewall-Config?</div>
        <div><br>
        </div>
        <div>Ansonsten würde ich Daniel zustimmen, ein Artikel gehört
          thematisch zur Middleware.</div>
        <div><br>
        </div>
        <div>Grüße</div>
        <div>Frank</div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">Am 18. März 2018 um 16:37 schrieb
          Michael Koch <span dir="ltr"><<a href="mailto:princemichi@gmail.com" target="_blank">princemichi@gmail.com</a>></span>:<br>
          <blockquote class="gmail_quote" style="border:none;margin-left:0px;margin-right:0px;margin-top:0px;padding-left:0px;padding-right:0px">
            <div bgcolor="#FFFFFF">
              <p>Hallo an Alle!</p>
              Andreas hat vor geraumer Zeit einen <a href="https://github.com/volkszaehler/volkszaehler.org/pull/659" target="_blank">Pull Request</a>
              geschrieben, mit dem es möglich ist den Zugang zum
              Frontend nur berechtigten Usern zur Verfügung zu stellen.<br>
              Jetzt haben wir uns darauf geeinigt diesen in den Master
              zuintegrieren, damit alle Installationen von diesem
              großartigen Feature profitieren können.<br>
              Hierbei gibt es einige Punkte zu Berücksichtigen:<br>
              - Die PHP Reqirements werden auf PHP 7.0 angehoben, ältere
              Webserverkonfigurationen müssen auf ältere VZ-Versionen
              zurückgreifen<br>
              - Aufgrund derzeit fehlender Backend-Konfiguartion muss
              der neue Auth in den Config-Files manuall eingerichtet
              werden.<br>
              Ziel dieses Threads ist es einen geeigneten Wiki-Artikel
              auf die Beine zu stellen um allen eine einfache
              Konfiguration zu ermöglichen.<br>
              Ich pers. gebe zu, das ich noch einige Probleme mit der
              Firewall-Konfiguartion habe.<br>
              Ich bitte als einmalig darum, hier die
              Einstellmöglichkeiten von euch erklärt zu bekommen, damit
              wir einen passenden Wikiartikel erstellen können.
              <p>Nächste Frage: Wie soll dieser Artikel im Wiki heißen?
                Mein Vorschlag: <a href="https://wiki.volkszaehler.org/software/frontends/frontend/auth" target="_blank">https://wiki.volkszaehler.org/<wbr>software/frontends/frontend/au<wbr>th</a></p>
              <p>Beste Grüße,</p>
              <p>Michael<br>
              </p>
            </div>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
  </div></div></div>

</blockquote></div><br></div></div></div>