【PHP】 解释 BlobSharedAccessSignatureHelper::generateBlobServiceSharedAccessSignatureToken() 函数 【PHP】解析BlobSharedAccessSignatureHelper::generateBlobServiceSharedAccessSignatureToken()函数说明
我曾经不知道如何使用BlobSharedAccessSignatureHelper::generateBlobServiceSharedAccessSignatureToken(),所以感到非常沮丧,于是进行了调查。
这到底是什么?
这是一个用于生成访问 Azure 存储 BLOB 的 SAS 的函数。
您可以自由决定其有效期限等,因此可以轻松地实现只想让其可见一小时之类的要求。
BlobSharedAccessSignatureHelper::generateBlobServiceSharedAccessSignatureToken()可以被重写为:
BlobSharedAccessSignatureHelper的generateBlobServiceSharedAccessSignatureToken()。
public function generateBlobServiceSharedAccessSignatureToken(
string $signedResource,
string $resourceName,
string $signedPermissions,
\Datetime|string $signedExpiry,
\Datetime|string $signedStart = "",
string $signedIP = "",
string $signedProtocol = "",
string $signedIdentifier = "",
string $cacheControl = "",
string $contentDisposition = "",
string $contentEncoding = "",
string $contentLanguage = "",
string $contentType = ""
)
{}
已签名资源
资源:RESOURCE_TYPE_CONTAINER或RESOURCE_TYPE_BLOB中的任何一种。
资源:如果是RESOURCE_TYPE_CONTAINER,则允许容器级别的许可。
资源:如果是RESOURCE_TYPE_BLOB,则允许BLOB级别的许可。
$资源名称
如果RESOURCE_TYPE_CONTAINER的情况,则是容器名称。比如foo或bar。
如果资源类型是RESOURCE_TYPE_BLOB,则会生成完整路径,类似于foo/path/to/image.png。
$签名权限
如果RESOURCE_TYPE_CONTAINER的话,则为racwdl中的任意一个字符。
如果RESOURCE_TYPE_BLOB的话,则为racwd中的任意一个字符。
r只能进行读取操作。
a・c・w分别表示添加、创建和写入权限。
它们各自可以进行不同的操作,但不太清楚是什么具体操作。
d表示可以进行删除操作。
l用于获取BLOB的列表。
$签名到期
SAS的有效期限。UTC。
如果是字符串,必须以’Y-m-d\TH:i:s\Z’这种难以理解的格式才能工作,因此使用DateTime传递更安全。
无法传递DateTimeImmutable。
到此为止是必需的。
开始签名
按照中国的本地化方式改写如下:
SAS生效时间,以UTC表示。用于指定未来启用SAS的情况,如明天开始启用的情况。
$signedIP –> $签名IP
当想要限制请求来源的IP地址时,请进行指定。
$已签署的协议
値可以是 “https” 或者 “https,http” 二者之一。
默认设置是写着 “https,http”,但是当未指定时尝试进行http访问时,提示帐户不支持http,所以我不太明白。
签名标识符
文本长度不超过64个字符。
可以对 BLOB 进行进一步的访问限制,并且只有当访问策略 ID 匹配时才能访问。
据说是这样,但我从没用过,所以不太清楚。
看起来只能以容器为单位进行设置?
$缓存控制
当请求 BLOB 时,如果要更改返回响应中的 HTTP 头字段 Cache-Control,则需进行指定。
$contentDisposition 可以只提供一个版本来用中文反述,这个版本是:$内容分发
如果需要更改发出BLOB请求时返回的响应中的HTTP头字段Content-Disposition,需要进行指定。
编码内容
如果要更改BLOB请求时返回响应中的HTTP头字段Content-Encoding,请指定。
$contentLanguage的中文表达
如果要更改在向 BLOB 发出请求时返回的响应中的HTTP头字段 Content-Language,请进行指定。
$contentType的中文含义
如果想要更改通过BLOB请求返回的响应中的HTTP头字段Content-Type,请进行指定。
使用方法
$sas = (new BlobSharedAccessSignatureHelper())->generateBlobServiceSharedAccessSignatureToken(
Resources::RESOURCE_TYPE_CONTAINER,
'samplecontainer',
'r',
new \DateTime('+1 hour'),
);
$url = 'https://example.blob.core.windows.net/samplecontainer/foo/bar/image.png?' . $sas;
echo "<img src='{$url}'>";
印象
非常痛苦。
尽管以前没有BlobSharedAccessSignatureHelper::generateBlobServiceSharedAccessSignatureToken()这个函数存在,我曾经努力实现SAS并遭到失败,所以与那个时候相比,现在要好得多。
顺便说一下,她死亡的原因是因为官方文件完全是虚假的,必须以2023-01-01T00:00:00Z的格式才可以。
我怎么会知道那样的事情。
只需要一个选择就好:
顺便说一下,由于 Microsoft Azure Storage PHP Client Libraries 已经不再使用了,所以未来最好使用 Azure-OSS Storage PHP Client Libraries 等。虽然说 Azure 和 PHP 社区能持续多久还有点可疑。而且说实话,真的需要这个的人大概在全世界也就十个左右吧?