WWW-Authenticate
pl
- programmiertechnik
0 Matthias Apsel-1 pl
0 Christian Kruse0 pl1 Christian Kruse0 pl
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
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
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, plMMn. 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
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, plMMn. 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
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, plMMn. 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
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
@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, plSchick 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:
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
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
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!