Конечная точка API не выполняет проверку токена CSRF в Sanctum – несоответствие токена CSRFPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Конечная точка API не выполняет проверку токена CSRF в Sanctum – несоответствие токена CSRF

Сообщение Anonymous »


Сейчас я изучаю Laravel (что идет не очень гладко), и у меня есть несколько маршрутов, настроенных для проверки аутентификации с использованием Sanctum.

Я создаю сервис laravel только с API, планируя, что проект ReactJS будет использовать API.

В настоящее время я не использую ReactJS и использую REST-клиент Insomnia для тестирования API.

У меня есть маршрут для регистрации нового пользователя, входа в систему, а затем еще один маршрут, который просто возвращает аутентифицированного пользователя, чтобы доказать, что механизм аутентификации работает правильно.

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

Я тестирую это с помощью Insomnia, отправляя запрос на /sanctum/csrf-cookie, который возвращает мне 204, а Insomnia устанавливает 3 файла cookie, один из которых представляет собой XSRF-TOKEN, который, как я понимаю, представляет собой зашифрованную форму CSRF. токен.

Затем я успешно вхожу в систему, а затем, когда я вызываю свой маршрут, чтобы получить аутентифицированного пользователя, я изменяю или удаляю файл cookie XSRF-TOKEN и отправляю запрос, тогда как я ожидал бы получить ошибку о том, что токен не соответствует, но это похоже, это не так, и я получаю действительный ответ.

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

Route::prefix('/auth')->group(__DIR__ . '/endpoints/auth.php'); Route::middleware('auth:sanctum')->get('/me', function(){ // возвращаем ответ (ноль, 200); вернуть авторизацию()->пользователь(); }); В моем /endpoints/auth.php у меня есть следующее:

Route::post('/register', [UserController::class, "register"]); Route::post('/login', [UserController::class, "login"]); Route::middleware('auth:sanctum')->post('/logout', [UserController::class, 'logout']); Итак, в приведенном выше коде, когда я отправляю запрос в /api/me после изменения или удаления моего XSRF-TOKEN, я ожидаю несоответствия токена, но на самом деле я получаю 200 ОК с данные аутентифицированного пользователя.

ОБНОВЛЕНИЕ

Мне удалось добиться некоторого прогресса.

Я добавил следующие элементы в App/Http/Kernel.php в массиве API следующим образом:

'api' => [ \App\Http\Middleware\EncryptCookies::класс, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::класс, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::класс, \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'дроссель: API', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], Когда я пытаюсь отправить запрос на вход, я получаю HTTP 419 с ошибкой несоответствия токена CSRF.

Итак, я добился прогресса: теперь он, кажется, пытается выполнить проверку CSRF, но теперь всегда говорит, что есть несоответствие, даже несмотря на то, что он отправляет в запросе один и тот же файл cookie XSRF-TOKEN.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»