perl版阿里雲簽名公共引數方法

2021-07-14 14:44:00 字數 2509 閱讀 9735

記錄下,阿里雲的簽名驗證真心蛋疼,比如時間戳做了二次utf8轉碼,文件中的簽名結果與實際不相符等

package aliyun;

use moose;

use redis;

use posix qw(strftime);

use data::dumper;

use digest::hmac_sha1 qw(hmac_sha1 hmac_sha1_hex);

use json;

use uri::escape;

use lwp::useragent;

#定義簽名常量

has 'accesskeyid' => ( isa => 'str', is => 'ro', required => 1 );

has 'accesskeysecret' => ( isa => 'str', is => 'ro', required => 1 );

has 'format' =>

( isa => 'str', is => 'rw', required => 1, default => 'json' );

has 'signaturemethod' =>

( isa => 'str', is => 'rw', required => 1, default => 'hmac-sha1' );

has 'signatureversion' =>

( isa => 'str', is => 'rw', required => 1, default => '1.0' );

has 'serverurl' => ( isa => 'str', is => 'rw', required => 1 );

has 'version' =>

( isa => 'str', is => 'rw', required => 1, default => '2015-01-09' );

has 'requestmethod' =>

( isa => 'str', is => 'rw', required => 1, default => 'get' );

has 'timestamp' => (

isa => 'str',

is => 'rw',

required => 1,

default => strftime( "%y-%m-%dt%h:%m:%sz", localtime( time - 3600 * 8 ) ));

sub params_init = $self->accesskeyid;

$apiparams-> = $self->signaturemethod;

$apiparams-> = $self->signatureversion;

$apiparams-> = $self->timestamp;

$apiparams-> = rand;

$apiparams-> = $self->version;

$apiparams-> = $self->format;

#請求引數與公共引數合併

$apiparams-> = $actionparams-> for keys %$actionparams;

$apiparams-> = $self->compute_signature($apiparams);

my $requesturl = $self->serverurl . "?";

for my $key ( keys %$apiparams ) ;

$requesturl .= "$key=" . $value . "&";

}#刪除最後乙個字元&

$requesturl = substr( $requesturl, 0, -1 );

my $ua = lwp::useragent->new();

my $result = $ua->get($requesturl);

return decode_json $result->content; }

sub compute_signature );

}$canonicalizedquerystring = join "&", @$strarr;

# 生成用於計算簽名的字串 stringtosign

my $stringtosign

= 'get&%2f&' . uri_escape_utf8($canonicalizedquerystring);

# 計算簽名,注意accesskeysecret後面要加上字元'&'

my $hmac = digest::hmac_sha1->new( $accesskeysecret . "&" );

$hmac->add($stringtosign);

my $signstr = $hmac->b64digest;

$signstr =~ s/$/=/g;

return $signstr;

}1;

阿里雲認證簽名生成

呼叫阿里雲介面,需要在headers中新增簽名 x ca signature欄位 以whois查詢介面為例 阿里雲生成認證字串文件 以nodejs為例 const domainname your domain name const apiurl const headers path 除根路徑以外的其...

阿里雲閘道器簽名特殊字元無法通過

原 public static string sendbypost string url,int sotimeout,int connecttimeout,string goodsserial string stringtosign string date new date togmtstring ...

1,阿里雲api的簽名生成及使用

import os,sys import hashlib import hmac import base64 import urllib import time import uuid import requests defget iso8601 time 返回iso8601格式的時間 time z...