#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-адреса.