Задача
Я создаю подписанный URL-адрес через функцию laravels 'временный подпись', скопированную и вставленную из laravels подписанные маршруты документация, на моем веб-сервере URL-адрес выходит с недопустимой подписью 403. Подписанный URL работает на моем локальном компьютере, но после загрузки его на мой тестовый сервер выдает ошибку, показанную ниже.
Что я пробовал
Я уже некоторое время искал решение и перепробовал многие из них, которые были опубликованы при переполнении стека, но, кажется, ничто не решает мою проблему.
Я пробовал все следующее:
- Принудительное выполнение всех маршрутов к https через AppServiceProvider, это заставило все URL-адреса быть https, но дало тот же результат.
Я попытался изменить конфигурацию Nginx, как описано здесь .
Я также попытался добавить промежуточное программное обеспечение TrustProxies с прокси, настроенными на '*' или все, как описано в документации laravel на Trust Proxies , тот же результат.
Остановил веб-сервер, заставляющий домен использовать https для проверки, был ли он вызван только https, тот же результат.
- ОБНОВЛЕНИЕ -
Я вошел в vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php
, пытаясь найти какие-либо подсказки в проекте. Я решил собрать данные (dd) с токенами, которые он сравнивал в моих локальных и размещенных проектах, и это было результатом. Код также показан ниже.
public function hasValidSignature(Request $request, $absolute = true)
{
$url = $absolute ? $request->url() : '/'.$request->path();
$original = rtrim($url.'?'.Arr::query(
Arr::except($request->query(), 'signature')
), '?');
$expires = $request->query('expires');
$signature = hash_hmac('sha256', $original, call_user_func($this->keyResolver));
dd($signature . " :: " . $request->query('signature', ''));
return hash_equals($signature, (string) $request->query('signature', '')) &&
! ($expires && Carbon::now()->getTimestamp() > $expires);
}
Локальный проект
Хостинг-проект
То есть токен не передается на моем веб-сервере, а находится на моем локальном. Еще одна вещь, которую я заметил, это то, что токен веб-сервера всегда один и тот же и никогда не меняется, несмотря ни на что.
Мою текущую конфигурацию Nginx можно посмотреть здесь .
Моя текущая конфигурация виртуальных хостов здесь .