首页 > 解决方案 > 我的 openstack 临时 URL 一直无效

问题描述

我尝试在 PHP 应用程序中为我的 Openstack ObjectStorage 生成临时 URL。我遵循了他们的文档,但即使他们的 python 示例也不起作用。

到目前为止,这是我的生成器:

class TempUrlGenerator implements ITempUrlGenerator
{
    //See https://docs.openstack.org/swift/latest/api/temporary_url_middleware.html for details.
    public function generate(string $url, int $validity = 5): string
    {
        $timestamp = time() + ($validity * 60);

        return sprintf(
            '%s?temp_url_sig=%s&temp_url_expires=%s',
            $url,
            $this->generateSignature($url, $timestamp),
            $timestamp
        );
    }

    private function generateSignature(string $url, int $timestamp): string
    {
        $body = sprintf(
            '%s\n%s\n%s',
            'GET',
            $timestamp,
            $this->getPath($url)
        );

        return hash_hmac('sha1', $body, trim(getenv('OPENSTACK_TEMPURL_KEY')));
    }

    private function getPath(string $url): string
    {
        $exploded = explode('/v1/', $url);

        return sprintf('/v1/%s', $exploded[1]);
    }
}

URL 是完整的 URL ( https://myserver.host.com/v1/... ),有效性是我希望保持 URL 有效的分钟数。

除此之外,env 变量是我的密钥。我已经在我的帐户和我的容器上使用 HEAD 调用检查了密钥确实是使用好的标题上传到它们上的。(X-Account-Meta-Temp-URL-Key 和 X-Container-Meta-Temp-URL-Key)。

我还检查了多个示例和实现。

然而,当我尝试它们时,我不断收到 401 invalid temp url。

你知道为什么或如何解决这个问题吗?也许我们的服务器上有某种设置可以检查?

问候,

标签: phpopenstack

解决方案


推荐阅读