【发布时间】:2018-10-31 20:16:17
【问题描述】:
我正在使用 REST API 在 Azure 存储中创建一个容器。我想授予公共权限或容器权限以将 blob 动态上传到容器中。我在标题中写“x-ms-blob-public-access:container”但是当我包含以下错误时
错误
结果 HTTP/1.1 403 服务器未能验证请求。制作 确保 Authorization 标头的值正确形成,包括 签名。内容长度:709 内容类型:应用程序/xml 服务器:Microsoft-HTTPAPI/2.0 x-ms-request-id: 832b00af-501e-0032-7c96-f1ba27000000 日期:2018 年 5 月 22 日星期二 06:29:51 GMT AuthenticationFailedServer 未能对请求进行身份验证。 确保 Authorization 标头的值格式正确 包括签名。 请求ID:832b00af-501e-0032-7c96-f1ba27000000 时间:2018-05-22T06:29:51.7678173Z在HTTP中发现MAC签名 请求'bmJk1ntjZX17woKGTm1YjEaIU3N/NSOXt/a8Gq4lCI0='不一样 作为任何计算的签名。服务器使用以下字符串进行签名:'PUT 0 x-ms-blob-public-access:container x-ms-date:Tue,2018 年 5 月 22 日 格林威治标准时间 06:29:51 x-ms-version:2009-09-19 /dsmsstor1/66-62-108-images restype:container'.Error
我想我也必须将“x-ms-blob-public-access:container”放入 sig 字符串中,但我无法正确执行。帮助我形成正确的签名字符串。即 (PUT\n\n\n0\n\n\n\n\n\n\n\n\nx-ms-date:". $date . "\nx-ms-version:".$version. "\n/dsmsstor1/66-62-108-images\nrestype:container) 我的代码 ----------
<?php
date_default_timezone_set ( 'GMT' );
$date = date ( "D, j M Y H:i:s T" );
$version = "2009-09-19";
$account_key = 'xxxxxxxxx';
$utf8_encode_str = utf8_encode ("PUT\n\n\n0\n\n\n\n\n\n\n\n\nx-ms-date:". $date . "\nx-ms-version:".$version."\n/dsmsstor1/66-62-108-images\nrestype:container" );
$signature_str = base64_encode(hash_hmac('sha256',$utf8_encode_str, base64_decode($account_key), true));
$header = array (
"x-ms-date: " . $date,
"x-ms-version: " . $version,
"Authorization: SharedKey dsmsstor1:" . $signature_str,
"Content-Length: 0",
"x-ms-blob-public-access:container"
);
$url="https://dsmsstor1.blob.core.windows.net/66-62-108-images?restype=container";
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, 'PUT' );
curl_setopt ($ch, CURLOPT_URL, $url );
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt ($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt ($ch, CURLOPT_HEADER, True );
$result = curl_exec ( $ch );
echo ('Result<br/>');
print_r($result);
echo ('Error<br/>');
print_r(curl_error($ch));
curl_close($ch);
?>
【问题讨论】:
标签: azure azure-storage