Azure: создать SAS вручную - PullRequest
       4

Azure: создать SAS вручную

0 голосов
/ 20 января 2020

Я пытаюсь реализовать функцию Perl для создания токенов SAS. Делая все в соответствии с документацией (https://docs.microsoft.com/en-us/rest/api/storageservices/create-service-sas), я всегда получаю сообщение об ошибке «Поля подписи не правильно сформированы».

Мой ресурс тестирования - «https://ribdkstoragepoc.blob.core.windows.net/project-poc/foo/koteyka.jpg». Переменные, заполненные моим кодом:

подписанные разрешения = 'r'

signedexpiry = '2020-05-01T07: 59: 00Z'

canonicalizedresource = '/ blob / ribdkstoragepoc / project-poc / foo / koteyka.jpg '

signatureresource =' b '

signatureversion =' 2018-03-28 '

Другие переменные - просто пустые строки. Я генерирую строку, используя следующий шаблон:

my $ stringToSign = $ permissions. "\ n". $ начало. "\ n". $ expiry. "\ n". $ canonicalizedResource. "\ n". $ идентификатор. "\ n". $ IP. "\ n". протокол "\ n". $ версия. "\ n". $ ресурс. "\ n". $ snapshotTime. "\ n". $ rs cc. "\ n". $ rscd. "\ n". $ rsce. "\ n". $ rscl. "\ n". $ rsct;

Строка для подписи:

r

2020-05-01T07:59:00Z
/blob/ribdkstoragepoc/project-poc/foo/koteyka.jpg



2018-03-28
b






Расчет подписи: my $ sig = Digest :: SHA :: hmac_sha256_base64 ($ stringToSign, $ key);

Наконец, окончательный URL выглядит так: https://ribdkstoragepoc.blob.core.windows.net/project-poc/foo/koteyka.jpg?sig=YcwWvOT2FtOZGbXQxMAoSxvA2HhRmMAUp%2B6WUY%2Bjbjg&sv=2018-03-28&se=2020-05-01T07%3A59%3A00Z&sr=b&sp=r

Как я уже говорил, это не работает. У кого-нибудь есть идеи, что может быть не так?

1 Ответ

1 голос
/ 20 января 2020

Разобрался, что не так с вашим кодом. В основном вы используете 2018-03-28 версию Storage REST API, поэтому вам не нужно включать $resource и $snapshotTime в свои $stringToSign.

Более того, вам нужно будет дополнить свою подпись 1-4 = (Ref: https://github.com/smarx/waz-storage-perl/blob/master/WindowsAzure/Storage.pm#L42).

Исходя из этого, вот код:

use strict;
use warnings;
use Digest::SHA qw(hmac_sha256_base64);
use MIME::Base64;

my $permissions = 'r';
my $start = '';
my $expiry = '2020-01-31T00:00:00Z';
my $canonicalizedResource = '/blob/ribdkstoragepoc/project-poc/foo/koteyka.jpg';
my $identifier = '';
#my $resource = 'b';
my $IP = '';
my $version = '2018-03-28';
my $protocol = '';
#my $snapshotTime = '';
my $rscc = '';
my $rscd = '';
my $rsce = '';
my $rscl = '';
my $rsct = '';

my $stringToSign = $permissions . "\n" . $start . "\n" . $expiry . "\n" . $canonicalizedResource . "\n" . $identifier . "\n" . $IP . "\n" . $protocol . "\n" . $version . "\n" . $rscc . "\n" . $rscd . "\n" . $rsce . "\n" . $rscl . "\n" . $rsct;

print $stringToSign;

my $accountKey = 'your-base64-account-key';

my $sig = Digest::SHA::hmac_sha256_base64($stringToSign, decode_base64($accountKey));
$sig .= '=' x (4 - (length($sig) % 4));
print "\n---------------------\n";

print $sig;

print "\n";

Попробуйте, работа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...