pl: WWW-Authenticate

Moin,

der Prompt soll nur erscheinen, wenn die Seite mit einem bestimmten Parameter aufgerufen wird. Dass dafür ein Status => 401 gesendet werden muss ist mir klar, nur wie es dann weitergeht nicht. Bitte mal um Hinweise, pl

  1. Hallo pl,

    der Prompt soll nur erscheinen, wenn die Seite mit einem bestimmten Parameter aufgerufen wird. Dass dafür ein Status => 401 gesendet werden muss ist mir klar, nur wie es dann weitergeht nicht. Bitte mal um Hinweise, pl

    MMn. geht das nicht. Du musst vorher auf eine ungeschützte Seite umleiten. Falls ich verstanden habe, was du meinst.

    Bis demnächst
    Matthias

    --
    Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
    1. hi,

      der Prompt soll nur erscheinen, wenn die Seite mit einem bestimmten Parameter aufgerufen wird. Dass dafür ein Status => 401 gesendet werden muss ist mir klar, nur wie es dann weitergeht nicht. Bitte mal um Hinweise, pl

      MMn. geht das nicht. Du musst vorher auf eine ungeschützte Seite umleiten. Falls ich verstanden habe, was du meinst.

      Auf handelsüblichem Wege isses tatsächlich nicht machbar, WWW-Authenticate auf Parameter oder gar bestimmte Parameter einzuschränken. Und es gibt noch einen weiteren Grund: Wenn ich bei meinem Provider eine Subdomäne einrichte, hat die denselben ScriptAlias wie alle anderen Domänen. D.h., dass WWW-Authenticate auf die Subdomain hintergangen werden kann indem Anwendungen über die anderen Domänen aufgerufen werden können, Beispiel:

      # SubDomain dyndns.example.com
      DirectoryIndex /cgi-bin/dyndns.cgi
      
      AuthType Basic
      AuthName "DynDNS"
      AuthUserFile /home/dyndns/.dyndns
      Require valid-user
      

      Aufruf durch die Hintertür ohne Passwort möglich

      http://example.com/cgi-bin/dyndns.cgi
      

      MfG

      1. hi,

        der Prompt soll nur erscheinen, wenn die Seite mit einem bestimmten Parameter aufgerufen wird. Dass dafür ein Status => 401 gesendet werden muss ist mir klar, nur wie es dann weitergeht nicht. Bitte mal um Hinweise, pl

        MMn. geht das nicht. Du musst vorher auf eine ungeschützte Seite umleiten. Falls ich verstanden habe, was du meinst.

        Auf handelsüblichem Wege isses tatsächlich nicht machbar, WWW-Authenticate auf Parameter oder gar bestimmte Parameter einzuschränken.

        Aber guck wie einfach das am Ende wird, wenn ein einziger Aufruf einer Methode den Authenticate-Challenge abwickelt:

        if( $self->param('edit') ){
           my $user = $self->auth();
           die "Hi $user, schön dass Du da warst ;) \n";
        }
        

        Und fertig.

        MfG

        1. hi,

          der Prompt soll nur erscheinen, wenn die Seite mit einem bestimmten Parameter aufgerufen wird. Dass dafür ein Status => 401 gesendet werden muss ist mir klar, nur wie es dann weitergeht nicht. Bitte mal um Hinweise, pl

          MMn. geht das nicht. Du musst vorher auf eine ungeschützte Seite umleiten. Falls ich verstanden habe, was du meinst.

          Auf handelsüblichem Wege isses tatsächlich nicht machbar, WWW-Authenticate auf Parameter oder gar bestimmte Parameter einzuschränken.

          Aber guck wie einfach das am Ende wird, wenn ein einziger Aufruf einer Methode den Authenticate-Challenge abwickelt:

          if( $self->param('edit') ){
             my $user = $self->auth();
             die "Hi $user, schön dass Du da warst ;) \n";
          }
          

          Und fertig.

          Und siehe da, das funktioniert sogar über Ajax wenn das XHR-Objekt einen Request mit Parameter feuert, erscheint die Aufforderung zur Eingabe Benutzername+Passwort.

          Tipp des Tages: WWW-Authenticate via AJAX-Request.

          MfG

  2. Hallo pl,

    der Prompt soll nur erscheinen, wenn die Seite mit einem bestimmten Parameter aufgerufen wird. Dass dafür ein Status => 401 gesendet werden muss ist mir klar, nur wie es dann weitergeht nicht. Bitte mal um Hinweise, pl

    Schick ein 403, wenn der Browser keine Auth-Daten sendet oder die Daten falsch sind. Schick ein 401, wenn du den Browser veranlassen möchtest, „das Prompt” anzuzeigen.

    LG,
    CK

    1. @Christian Kruse

      der Prompt soll nur erscheinen, wenn die Seite mit einem bestimmten Parameter aufgerufen wird. Dass dafür ein Status => 401 gesendet werden muss ist mir klar, nur wie es dann weitergeht nicht. Bitte mal um Hinweise, pl

      Schick ein 403, wenn der Browser keine Auth-Daten sendet oder die Daten falsch sind. Schick ein 401, wenn du den Browser veranlassen möchtest, „das Prompt” anzuzeigen.

      Korrekt ;)

      Es gibt 3 Zustände:

      1. status 401, Prompt soll hervorgewürgt werden,
      2. status 200, die Credentials sind richtig, Seite wird ausgeliefert,
      3. status 403, Benutzername // Passwort falsch.

      Mir ist nicht ganz klar, woran ich (2) und (3) serverseitig erkenne. Der Browser sendet zwar den Authorization-Header, aber in meiner Serverumgebung ist der nirgenwo zu finden.

      Bitte mal um Hinweise, pl

      1. Hallo pl,

        Mir ist nicht ganz klar, woran ich (2) und (3) serverseitig erkenne. Der Browser sendet zwar den Authorization-Header, aber in meiner Serverumgebung ist der nirgenwo zu finden.

        Die Daten, die der Browser sendet, stehen im Authorization-Header, bei CGI also in der Umgebungs-Variable HTTP_AUTHORIZATION. Ggfls musst du deinen Webserver dazu überreden, diese Variable auch weiterzureichen, bei Apache könnte man das z.B. mit

        SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
        

        erreichen.

        LG,
        CK

        1. hi CK,

          SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
          

          Das isses, vielen Dank! Ich hatte das vor Jahren schonmal so gemacht, naja, die Erinnerungen haben nach meinem Schlaganfall auch gelitten ;)

          Nun ist das dabei herausgekommen, es ist konfigurierbar und genau das war das Ziel: Die Konfiguration vom Webserver weg in die eigene Konfiguration zu verlegen.

          Normalerweise ist Code für ACL-Zeugs total raus aus meinem FW und Access-Control wird über Content-Negotiation geregelt. Authorization Basic hat jedoch den Vorteil, dass bestimmte Dinge einfacher automatisierbar sind, deswegen musste das jetzt rein. Im CODE selbst wird ja nur noch bei Bedarf die Factory-Methode $self->auth() aufgerufen, die regelt das ganze HTTP-Geschnatter (Authorization-Challenge). Mit dieser einen Zeile kann ich leben ;)

          Viele Grüße!