API ограничения скорости Laravel, аутентифицированный с помощью API Token - PullRequest
0 голосов
/ 29 января 2019

Я создаю спокойный API-интерфейс для пользователей моего приложения Laravel для извлечения их данных.

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

Основная причина, по которой я хочу реализовать ограничение скорости, состоит в том, чтобы уменьшить влияние случайного / преднамеренного DDOS, а также части текущего пакета подписки пользователей (необходимо).Из-за последнего у разных пользователей могут быть разные скорости.

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

Мне интереснокак сеанс обрабатывается.Из того, что я вижу, класс Laravel TokenGuard не хранит пользователя между запросами.Поэтому пользователь извлекается между каждым запросом, даже для получения ограничения скорости.Кажется, это лишает смысла ограничитель скорости, если мы все еще выполняем запросы к базе данных.

Каков подходящий способ справиться с этим?

Если я напишу свое собственное промежуточное ПО аутентификации исохранить пользователя в сеансе, это будет работать?Могут ли запросы, отправленные с другого сервера (не браузера), обрабатывать сессии?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Если запрос с каким-либо токеном достигнет вашего приложения, вам не понадобится какой-либо сеанс.Как вы и предполагали: сеанс обычно обрабатывается с помощью файлов cookie, но необработанные HTTP-вызовы (как это делает cURL) обычно не используют их.

Не переоценивайте стоимость получения текущего пользователя отбаза данных - если ваше приложение выполняет еще несколько действий, эти дополнительные действия будут иметь значение!Получение одного объекта из базы данных довольно дешево по сравнению со всем остальным, и для проверки правильности разрешений и ограничений скорости это, очевидно, необходимо.

Все остальное выглядит так, будто вы ищете что-то вроде паспорта Laravel(см. https://laravel.com/docs/5.7/passport). Дополнительные инструменты, такие как пакет Throttle (см. https://github.com/GrahamCampbell/Laravel-Throttle), которые помогут включить ограничение скорости для ваших маршрутов

0 голосов
/ 29 января 2019

Каждый раз, когда кто-нибудь заходит на ваш сайт, вы раскручиваете весь экземпляр Laravel, который уже создает нагрузку на ваш сервер.DDOS не зависит только от проблем с вашей БД.Если кто-то решит DDOS вас, вы заметите!Все, что вы можете сделать, это смягчить проблему, поэтому не беспокойтесь слишком сильно, что каждый запрос имеет связанный вызов БД.

Вы можете иметь локальный сеанс, но в долгосрочной перспективе это плохое проектное решение,поскольку он вводит состояние на ваш сервер, что в будущем значительно усложнит масштабирование.(https://12factor.net/ для получения дополнительной информации об этом.) Именно поэтому Laravel использует вместо этого пользователя, хранящегося в БД.

Если вы не делаете что-то особенное, обычно можно предположить, что Laravel используетадекватное решение.Они делают фреймворки, чтобы вы могли беспокоиться о бизнес-логике!

Наконец, существует множество веб-сайтов.Скорее всего, к тому времени, когда вы станете достаточно большими, чтобы привлечь внимание людей, пытающихся DDOS, вас (помните, что это потребует ресурсов и, следовательно, денег), вы, вероятно, будете использовать гораздо более сложную систему.

...