Laravel 403 Invalid Signature только на веб-сервере Nginx - PullRequest
1 голос
/ 21 июня 2019

Задача

Я создаю подписанный URL-адрес через функцию laravels 'временный подпись', скопированную и вставленную из laravels подписанные маршруты документация, на моем веб-сервере URL-адрес выходит с недопустимой подписью 403. Подписанный URL работает на моем локальном компьютере, но после загрузки его на мой тестовый сервер выдает ошибку, показанную ниже.

enter image description here

Что я пробовал

Я уже некоторое время искал решение и перепробовал многие из них, которые были опубликованы при переполнении стека, но, кажется, ничто не решает мою проблему.

Я пробовал все следующее:

  • Принудительное выполнение всех маршрутов к 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);
}

Локальный проект

local project

Хостинг-проект

remote machine

То есть токен не передается на моем веб-сервере, а находится на моем локальном. Еще одна вещь, которую я заметил, это то, что токен веб-сервера всегда один и тот же и никогда не меняется, несмотря ни на что.

Мою текущую конфигурацию Nginx можно посмотреть здесь .

Моя текущая конфигурация виртуальных хостов здесь .

1 Ответ

2 голосов
/ 24 июня 2019

Я думаю, что это может быть проблемой.Попробуйте изменить свой блок местоположения в файле конфигурации на

try_files $uri $uri/ /index.php?$query_string;

Я думаю, что вы пропустили ? между индексом и строкой запроса .

Обновите это и обязательно перезагрузите сервер Nginx.sudo service nginx reload

Дайте мне знать, если это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...