在perl中获取访问令牌

时间:2015-12-30 11:42:19

标签: perl authentication

有一个在bash中获取令牌的工作样本

response=$(curl  --fail --silent --insecure --data "username=test&password=test" \
--header "Authorization: Basic Y2xvdWQtYmVzcG9rZTo=" \
-X POST "https://lab7.local:8071/auth/token?grant_type=password")
token=`echo "$response" | awk '/access_token/{print $NF}' |sed 's/\"//g'`
echo $token

我正在尝试在perl中翻译它,但是获取代码400

#!/usr/bin/env perl
use strict;
use warnings;
use HTTP::Request;
use LWP::UserAgent;
use LWP::Simple;
use JSON::XS;
use Try::Tiny;

my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(POST => "https://lab7.local:8071/auth/token?grant_type=password");
my $post_data = "username=test&password=test";
$req->content($post_data);
my $resp = $ua->request($req);
if ($resp->is_success) {
    my $mess = $resp->decoded_content;
    print "$mess\n";
} else {
     my $code = $resp->code;
     print $code;
}

2 个答案:

答案 0 :(得分:1)

您的curl版本正在发送Perl版本中缺少的身份验证标头。你应该添加它。

$req->header(Authorization => 'Basic Y2xvdWQtYmVzcG9rZTo=');

答案 1 :(得分:0)

您正在使用用户名添加基本身份验证标头。该字符串只是基本64位编码的等价物。

所以你应该把它包含在你的LWP中:

$req -> authorization_basic ( 'cloud-bespoke' ); 

它应该有效。