Возможно ли открыть доступ SAS ко всем блокам на одном лазурном контейнере?Azure SAS container php
Я могу создать SAS для конкретного блоба, но я пытаюсь сделать это для контейнера, и я не нашел хорошие варианты?
Моя цель - открыть конкретный доступ ко всему контейнеру и прочитать некоторые конкретные капли.
$end = date('Y-m-d\TH\:i\:s\Z', strtotime('+10 minutes'));
$containerName=$_POST['container'];
$blobName= $_POST['blob'];
function getSASForBlob($accountName, $container, $blob, $permissions ,$expiry, $key){
/* Create the signature */
$_arraysign = array();
$_arraysign[] = $permissions;
$_arraysign[] = '';
$_arraysign[] = $expiry;
$_arraysign[] = '/blob/'.$accountName . '/' . $container . '/';
$_arraysign[] = '';
$_arraysign[] = '';
$_arraysign[] = '';
$_arraysign[] = "2015-12-11"; //the API version is now required
$_arraysign[] = '';
$_arraysign[] = 'file; attachment';
$_arraysign[] = '';
$_arraysign[] = '';
$_arraysign[] = 'binary';
$_str2sign = implode("\n", $_arraysign);
return base64_encode(hash_hmac('sha256', urldecode(utf8_encode($_str2sign)), base64_decode($key), true));
}
function getBlobUrl($accountName, $container, $blob, $resourceType, $permissions, $expiry, $_signature){
/* Create the signed query part */
$_parts = array();
$_parts[] = (!empty($expiry))?'se=' .urlencode($expiry):'';
$_parts[] = 'sr=' . $resourceType;
$_parts[] = (!empty($permissions))?'sp=' . $permissions:'';
$_parts[] = 'sig=' . urlencode($_signature);
$_parts[] = 'sv=2015-12-11';
$_parts[] = 'comp=list';
/* Create the signed blob URL */
$_url = 'https://'
.$accountName.'.blob.core.windows.net/'
. $container . '/'
. $blob . '?'
. implode('&', $_parts);
return $_url;
}
$sig = getSASForBlob("cloudviewer",$containerName, $blobName, "r", $end, $key);
$url = getBlobUrl("cloudviewer",$containerName,$blobName,"c","r", $end, $sig);
echo(json_encode(array('url' => $url, 'experity' => $end)));
Моя ошибка:
Подпись не соответствует. Используемая строка для обозначения: r 2016-12-10T16: 53: 00Z/blob/cloudviewer/450-423-422-392 2015-12-11
Вы получаете сообщение об ошибке HTTP, можете ли вы поделиться им, пожалуйста? Вы проверяли, что дата истечения срока действия находится в UTC? Согласно документации ваш код должен работать https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/constructing-a-service-sas –
Я добавляю результат ошибки, дата-время является хорошим, потому что я использую то же самое для прямого доступа к определенному блобу. – Lilice
Похоже, вы создаете токен службы SAS. Вместо этого вы можете попытаться создать токен SAS учетной записи. Я могу сказать, что это знак SAS службы, потому что там есть параметр sr. https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Constructing-an-Account-SAS?redirectedfrom=MSDN –