Ich versuche, einen vorhandenen CAS-Server zu verwenden, um die Anmeldung für ein Perl CGI-Webskript zu authentifizieren, und verwende das AuthCAS Perl-Modul (v 1.3.1). Ich kann mit dem CAS-Server verbinden, um das Service-Ticket zu bekommen, aber wenn ich versuche verbinden das Ticket meines Skript aus dem IO::Socket::SSL Modul mit dem folgenden Fehler zurück zu überprüfen:Warum kann ich keine Verbindung mit meinem CAS-Server mit Perls AuthCAS herstellen?
500 Can't connect to [CAS Server]:443 (Bad hostname '[CAS Server]')
([CAS Server] substituted for real server name)
Symptome/Tests:
- Wenn ich die generierte URL für die Authentifizierung in die Adressleiste des Webbrowsers eintippe, wird das erwartete XML-Snippet zurückgegeben. Es ist also kein schlechter Hostname.
- Wenn ich ein Skript ohne Verwendung des AuthCAS-Moduls erzeuge, aber das IO :: Socket :: SSL-Modul direkt verwende, um den CAS-Server zur Überprüfung auf dem generierten Serviceticket abzufragen, läuft das Perl-Skript von der Befehlszeile aus, aber nicht in der Browser.
- Wenn ich das AuthCAS-Modul in das Skript in Punkt 2 hinzufüge, funktioniert das Skript nicht mehr in der Befehlszeile und funktioniert immer noch nicht im Browser.
Hier ist die nackte Knochen-Skript, das den Fehler erzeugt:
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use AuthCAS;
use CGI::Carp qw(fatalsToBrowser);
my $id = $ENV{QUERY_STRING};
my $q = new CGI;
my $target = "http://localhost/cgi-bin/testCAS.cgi";
my $cas = new AuthCAS(casUrl => 'https://cas_server/cas');
if ($id eq ""){
my $login_url = $cas->getServerLoginURL($target);
printf "Location: $login_url\n\n";
exit 0;
} else {
print $q->header();
print "CAS TEST<br>\n";
## When coming back from the CAS server a ticket is provided in the QUERY_STRING
print "QUERY_STRING = " . $id . "</br>\n";
## $ST should contain the received Service Ticket
my $ST = $q->param('ticket');
my $user = $cas->validateST($target, $ST); #### This is what fails
printf "Error: %s\n", &AuthCAS::get_errors() unless (defined $user);
}
Irgendwelche Ideen auf, wo der Konflikt sein könnte?
die Fehler aus der Leitung kommen, direkt über dem Schnipsel Cebjyre nämlich
zitiert$ssl_socket = new IO::Socket::SSL(%ssl_options);
nämlich die Schaffung Buchse. Alle Eingabeparameter sind korrekt. Ich hatte das Modul bearbeitet, um Debug-Anweisungen einzufügen und alle Parameter kurz vor diesem Aufruf auszudrucken, und es geht ihnen allen gut. Sieht so aus, als müsste ich tiefer in das IO :: Socket :: SSL-Modul eintauchen.
Die ursprüngliche Modulquelle nicht bearbeiten. Kopieren Sie die Datei in ein neues Verzeichnis, legen Sie das Verzeichnis an der Vorderseite von @INC ab und führen Sie dann das Debugging durch. Auf diese Weise stören Sie das Original nicht und brechen möglicherweise andere Dinge, die vom Modul abhängen. –