Проблемы с модулем аутентификации в Apache 2 и Perl - PullRequest
1 голос
/ 11 января 2010

Я разработчик SharePoint, пытаюсь заставить модуль Perl работать с Subversion, но я думаю, что что-то не так с моим синтаксисом. Мне просто нужно получить имя пользователя и пароль, передать их в веб-сервис, получить истину / ложь и подтвердить подлинность на основе этой информации. Вот код модуля в Perl:

package Apache2::AuthGetUser; #authenticates users based on bool value from a asmx webservice
use SOAP::Lite;
use Data::Dumper;
use strict;
use warnings;
use Apache2::Access();
use Apache2::RequestRec();
use Apache2::Const ':common';

sub handler {
    my $r = shift;
    my $username = $r->user;
    my ($status, $password) = $r->get_basic_auth_pw;
    return $status unless $status == Apache2::Const::OK;

    my $endpoint = "http://localhost:2010/CIM.FBAAuthentication/12/template/layouts/wsFBAAuthentication.asmx"; #endpoint
    my $namespace = "http://tempuri.org/"; #namespace
    my $wsfunction = "AuthenticateUser"; #webservice function
    my $webservice = SOAP::Lite
        ->uri($namespace)
        ->on_action(sub { join '/', $namespace, $_[1] })
        ->proxy($endpoint);

    #my $method = SOAP::Data->name($wsfunction)
    my $method = SOAP::Data->name($wsfunction)
      ->attr({xmlns => $namespace});


    my @params = (SOAP::Data->name('UserName')->value($username)->type(''), SOAP::Data->name('Password')->value($password)->type(''));

    my $result = $webservice->call($method=>@params)->result;
    if($result ne "true"){
          $r->note_basic_auth_failure;
          #$r->log_reason($result);
          return AUTH_REQUIRED;
    }

    return Apache2::Const::OK;

}
1;

Если у кого-нибудь есть предложения, пожалуйста, дайте мне знать. Я получаю такую ​​ошибку в файлах конфигурации Apache: не могу вызвать метод "value" для неопределенного значения в строке C: /usr/site/lib/Apache2/AuthGetUser.pm. Если я получу это на работу, у меня будет публикация в блоге.

1 Ответ

1 голос
/ 11 января 2010

Попробуйте разбить эту строку

 my @params = (SOAP::Data->name('UserName')->value($username)->type(''), SOAP::Data->name('Password')->value($password)->type(''));

Например, делает

 my $userParam = SOAP::Data->name('UserName')->value($username)->type('xsd:string');

работа? Как насчет:

 my $userParam = SOAP::Data->new(name => 'UserName', value => $username, type => 'xsd:string');

с

 my @params = ($userParam, $pwdParam);

где вы определяете $ pwdParam аналогичным образом.

...