Как разрешить Laravel API только для мобильных приложений?

Я создаю мобильное приложение, используя реакцию native + Laravel API. Мобильное приложение может получить публичный доступ без регистрации / входа в систему.

То, что я хочу, как разрешить доступ API только для мобильных приложений. API не должен позволять из сети.

Всего 2 ответа


Вы можете использовать этот компонент Laravel, который вы можете установить с помощью Composer. Этот пакет предоставляет возможность использовать один ключ API, который вы положили в свой файл .env.

https://github.com/erjanmx/laravel-api-auth

Я полагаю, вы не хотите заниматься созданием этого самостоятельно.

composer require erjanmx/laravel-api-auth

Опубликовать конфигурацию пакета

php artisan vendor:publish --provider="ApiauthLaravelCAuthServiceProvider"

Добавьте это к .env

REMOTE_APP_TOKEN=<secret-token>

Добавьте промежуточное ПО apiauth: REMOTE_APP в свои маршруты

// /routes/api.php

Route::group(['prefix' => 'v1', 'middleware' => ['apiauth:REMOTE_APP']], function () {
     // your routes
});

Ваши URL в вашей группе доступны только при наличии действительного секретного токена

  • В запросе GET или POST
  • В заголовке запроса в качестве носителя авторизации
  • В сыром теле

Секретный токен - это любая строка, которую вы генерируете. Используйте один и тот же секретный токен в мобильном приложении и на стороне Laravel.


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

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


Есть идеи?

10000