【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 社区能持续多久还有点可疑。而且说实话,真的需要这个的人大概在全世界也就十个左右吧?