Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]553[/thread]

WWW-Authenticate: Authentifizierung per Perl Script

Leser: 2


<< |< 1 2 >| >> 17 Einträge, 2 Seiten
vinnie_paul
 2005-08-18 15:22
#5447 #5447
User since
2005-08-18
4 Artikel
BenutzerIn
[default_avatar]
Ich versuche mit einem Perl script den Browser dazu zu bringen sein
Login Fenster zu öffnen um dann eine authentifizierung mit einem Perl script
realisieren zu können doch wenn ich im Header den Status 401 übermittle
und dann mit www-authenticate versuche den Browser dazu zu bringen sein
Fenster zu öffnen dann passiert rein gar nix. Hat jemand ne Idee wo mein Fehler liegt muß dazu sagen das es mit der Headeranweisung von PHP4
bei mir gut funktioniert.

Code:

Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl -w
use CGI qw(header);
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);
print header(-status => "401 unauthorized",
-www_authenticate => 'Basic; realm=\"Test Login\"',
-type=>"text/html; charset=utf-8\n\n");
exit;


System: FreeBSD-Release-4 Apache 1.3.33 Perl5.8.6 PHP4.3.10

edit pq: code-tags hinzugefügt\n\n

<!--EDIT|pq|1124364529-->
jan
 2005-08-18 16:24
#5448 #5448
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
das ganze läuft als cgi? afair geht das nicht via cgi, du könntest es nur mit mod_perl machen, da das tiefer in apache drinsitzt, genauso wie php. via cgi könntest du nur den authentifizierten user auslesen, nicht aber selbst authentifizieren.
vinnie_paul
 2005-08-18 16:42
#5449 #5449
User since
2005-08-18
4 Artikel
BenutzerIn
[default_avatar]
Ich will den Username der dann in $ENV{'Remote_User'} landet dann auch nur nehmen und mit einer eigenen Datenbankabfrage dann auslesen da ich ein paar mehr Bedingungen habe als nur Username und Passwort.
Ansonsten nehm ich ja auch MySQL_Auth

Die frage bleibt nur wieso löst der Header den ich mit wie beschrieben erstellt hab
nicht den Authentifizierungsvorgang des Browsers aus ??
Strat
 2005-08-18 16:58
#5450 #5450
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
mit cgi habe ich das noch nie versucht... bei cgi habe ich da immer mit .htaccess gearbeitet...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
vinnie_paul
 2005-08-18 17:13
#5451 #5451
User since
2005-08-18
4 Artikel
BenutzerIn
[default_avatar]
wie gesagt für die einfache authentifizierung hab ich mysql_auth was n bissel komfortabler is als .htaccess Dateien zu verwenden finde ich ... aber wie kann ich denn nur mit Perl ein Header erzeugen der dem Browser sagt "hey mach n Loginfenster auf" ????
GwenDragon
 2005-08-18 17:47
#5452 #5452
User since
2005-01-17
14607 Artikel
Admin1
[Homepage]
user image
Das geht schon als CGI.

Wie wärs damit:
Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl -w
use strict;
use CGI qw(header);
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);
print header(-status => "401 unauthorized",
    -www_authenticate => 'Basic realm="Test Login"',
   -type=>"text/html; charset=utf-8");
exit;


Da waren wohl ein paar Vertipper bei dir drin ;)\n\n

<!--EDIT|GwenDragon|1124373555-->
GwenDragon
 2005-08-18 21:33
#5453 #5453
User since
2005-01-17
14607 Artikel
Admin1
[Homepage]
user image
Und so kann ein funktionables Skript aussehen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl
use strict;
use CGI qw(header);
use CGI::Carp qw(fatalsToBrowser);

my $cgi = new CGI;

if ( not $ENV{'REMOTE_USER'} ) {
   print header(-status => "401 Unauthorized",
    -www_authenticate => 'Basic realm="Test"',
    # Falls NonparsedHeaders notwendig, auskommetieren
#-nph => 1
#
);
   exit;
}
else {
   print header(-type=>"text/plain; charset=utf-8");
   print "JAWOLL! Login erfolgt!";
}

1;
\n\n

<!--EDIT|GwenDragon|1124386696-->
GwenDragon
 2005-08-18 22:00
#5454 #5454
User since
2005-01-17
14607 Artikel
Admin1
[Homepage]
user image
Da aber der Internet  Explorer manchmal eigene Vorstellungen von der Reihenfolge der Header bei der HTTP-Authentifizierung hat, könnte es sich statt header folgende Sequenz helfen:
Code: (dl )
1
2
3
print "WWW-Authenticate: Basic realm=\"Test für Login\"\n", 
 "HTTP/1.0 401 Unauthorized\n",
 "\n";


//EDIT: Nicht normgerecht und eigentlich nicht sinnvoll.
Dumm, wenn eine aus dem PHP-Manual abschreibt.

Besser ist es, das Problem mit dem »kaputten« IE zu haben als nicht genormtes Protokoll zu schreiben.\n\n

<!--EDIT|GwenDragon|1124448840-->
esskar
 2005-08-18 23:46
#5455 #5455
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=GwenDragon,18.08.2005, 20:00]
Code: (dl )
1
2
3
print "WWW-Authenticate: Basic realm=\"Test für Login\"\n", 
 "HTTP/1.0 401 Unauthorized\n",
 "\n";
[/quote]
nein; das liegt daran, dass bei normalen CGI, die antwort des webservers immer "HTTP/1.x 200 Ok" ist!
was du da machst, ist defenitiv falsches HTTP
vinnie_paul
 2005-08-19 10:57
#5456 #5456
User since
2005-08-18
4 Artikel
BenutzerIn
[default_avatar]
HEY Gwen,

vielen vielen Dank es klappt jetzt mit dem Login und der Grund für meine Verzweiflung war dieses dämliche Semikolon hinter dem "Basic" in der www-Authenticate Headeranweisung das hat einfach das ganze aus irgend einem Grund das ganze ins Leere laufen lassen.

jetzt funkt auch meen kurzer Testcode

Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl -w
use CGI qw(header);
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);
print header(-status => "401 unauthorized",
    -www_authenticate => 'Basic realm=\"Test Login\"', #<--  beseitigter Fehler
   -type=>"text/html; charset=utf-8\n\n");
exit;


Man du hast mir echt geholfen ich hab 2 Tage damit vegeudet rauszufinden
worans liegt. Hatte schon alles mögliche ausprobiert, mit und ohne non parsed Header und sonst was und jedesmal wenns keinen "Bad Header" error gab hätte es auch funktioniert wenn nich dieses blöde Semikolon da gewesen wäre :-)

Yeeeaaaahhh :-)  :-)  :-)

vielen Dank und die besten Grüße

Vinnie

edit pq: code-tags hinzugefügt\n\n

<!--EDIT|pq|1124439216-->
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2005-08-18 15:22.