Мой временный URL-адрес openstack остается недействительным

#php #openstack

#php #openstack

Вопрос:

Я пытаюсь сгенерировать временные URL-адреса для моего Openstack ObjectStorage в приложении PHP. Я следил за их документацией, но даже их пример 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=%samp;temp_url_expires=%s',
            $url,
            $this->generateSignature($url, $timestamp),
            $timestamp
        );
    }

    private function generateSignature(string $url, int $timestamp): string
    {
        $body = sprintf(
            '%sn%sn%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 недопустимый временный URL-адрес, когда я их пробую.

У вас есть какие-либо подсказки, почему или как я могу устранить это? Может быть, на нашем сервере есть какие-то настройки для проверки?

С уважением,

Комментарии:

1. Моим первым шагом по устранению неполадок будет печать параметров из программы PHP, а затем создание временного URL-адреса вручную с использованием этих параметров (инструкции: docs.openstack.org/swift/latest/api /… ).

2. Ничего не меняет. Я даже попробовал некоторые инструменты, отличные от PHP, для создания hmac…

3. Вы имеете в виду, что вы не можете создавать временные ссылки вручную?

4. Ну, я попробовал вручную (взял разные биты, использовал какой-то скрипт на python для генерации hmac), но все же я получаю этот старый добрый 401 недопустимый временный URL.

5. Может ли этот скрипт Python быть неправильным? Вы можете использовать swift tempurl команду для создания правильного URL-адреса.