Laravel — защита маршрутов API

#laravel #api #vue.js

#laravel #API #vue.js

Вопрос:

У меня есть приложение Laravel с VUEJS в качестве интерфейса, я получаю данные путем создания маршрутов API. Так, например, маршрут для получения данных posts будетhttp://localhost/api/posts

Каков наилучший способ защитить мои маршруты?

Я видел в документации laravel, что есть: Проверка API https://laravel.com/docs/5.8/api-authentication также паспорт https://laravel.com/docs/5.8/passport

Например, теперь любой пользователь может получить доступ к маршрутуhttp://localhost/api/posts и он получит json со всеми данными posts.

Я хочу защитить это и разрешить только внутренний запрос API от моего компонента VUEJS для получения данных

Ответ №1:

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

Решение простое, даже в документации должны быть разъяснены необходимые шаги.

Нам нужно:

  1. Добавить паспорт composer require laravel/passport
  2. Выполните миграции php artisan migrate
  3. Установить паспорт php artisan passport:install

Четвертый шаг более сложный. Нам нужно открыть наш User.php файл модели. И сначала нам нужно импортировать HasApiTokens и указать модели использовать его.

 use LaravelPassportHasApiTokens;

class User extends Authenticatable

{

    use HasApiTokens, Notifiable;

    .......

}
  

Затем на нашем config/auth.php нам нужно изменить массив api и изменить драйвер на passport

 'api' => [

    //for API authentication with Passport

    'driver' => 'passport',

    'provider' => 'users',

],
  

Затем на нашем app/Http/Kernel.php нам нужно добавить промежуточное программное обеспечение к $middlewareGroups массиву в ключе web .

 protected $middlewareGroups = [

    'web' => [

        ................

        //for API authentication with Passport

        LaravelPassportHttpMiddlewareCreateFreshApiToken::class,

    ],
  

Теперь мы можем использовать auth:api промежуточное программное обеспечение для наших маршрутов API.

 Route::middleware('auth:api')->group( function(){
    ...your routes here
});
  

Ответ №2:

Это то, что делает токен CSRF, это не совсем то же самое, что делает авторизация API

Токен CSRF:

Для защиты (внутренней) API или точки доступа от межсайтового доступа, см. Межсайтовый запрос_forgery

Срок действия токена CSRF истек, и он генерируется случайным образом, что затрудняет доступ к программе

Авторизация API:

API разработан для использования в других программах, и вы хотели бы защитить их от несанкционированного доступа

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


Более подробную информацию о защите CSRF в Laravel смотрите в: Рабочий документ Laravel CSRF

Как правило, мы защищаем все маршруты POST и УСТАНАВЛИВАЕМ маршруты по умолчанию