Я пытаюсь получить Mojo :: UserAgent для аутентификации через NTLM. Rougly вот так:Как я могу использовать аутентификацию NTLM или Kerberos с помощью Mojo :: UserAgent
use Mojo::UserAgent;
use Mojo::URL;
use Data::Dump qw/dump/;
use Path::Tiny;
use Authen::NTLM;
$\ = "\n"; $|++;
my $ntlm = Authen::NTLM-> new(host => "some.hidden.pl", user => 'foo',
domain => "bar", password => "baz", version => 2);
my $xml = path($ARGV[0])->slurp;
my $ua = Mojo::UserAgent->new;
my $url = Mojo::URL->new('https://some.hidden.pl/ews/exchange.asmx');
$url->userinfo(sprintf('%s\%s:%s', qw/bar foo baz/));
my $tx = $ua->get($url);
my $tx = $ua->build_tx(GET => $url);
$challenge = $ntlm->challenge;
$tx->req->headers->header('Authorization' => 'NTLM ' . $challenge);
$ua->start($tx);
$challenge = [ split /,\s*/, $tx->res->headers->header('www-authenticate') ]->[0] =~ s/NTLM //r;
$challenge = $ntlm->challenge($challenge);
my $tx = $ua->build_tx(GET => $url);
$tx->req->headers->header('Authorization' => 'NTLM ' . $challenge);
$ua->start($tx);
$tx = $ua->build_tx(POST => $url, {'Content-Type' => 'text/xml'}, $xml);
$tx->req->headers->content_type('text/xml');
$tx->req->headers->header('Authorization' => 'NTLM ' . $challenge);
$ua->start($tx);
print dump $tx->res;
но я продолжаю получать 401 при втором ответе сервера.
В чем я ошибаюсь? И будет ли проще использовать аутентификацию Kerberos (если да, как)?
благодаря
Вы заставляли локон стать альтернативой? –
Я пробовал завиток в сценариях bash - работает как шарм. Библиотеки perl имеют немного крутую кривую обучения. Я также попробовал LWP :: UserAgent с ntlm auth, который не удался. Поскольку это часть приложения Mojolicious, я хотел бы попробовать придерживаться Mojo :: UserAgent. Я попробую WWW :: Mechanize и LWP :: Protocol :: Net :: Curl тоже. – simone
Существует плагин [SPNEGO] (http://search.cpan.org/~agrolms/LWP-Authen-Negotiate-0.08/) для LWP, я сообщил несколько ошибок, но автор отказался их исправлять. Я бы не использовал его. –