Конечная точка API не выполняет проверку токена CSRF в Sanctum – несоответствие токена CSRF ⇐ Php
Конечная точка API не выполняет проверку токена CSRF в Sanctum – несоответствие токена CSRF
Сейчас я изучаю 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.
Сейчас я изучаю 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.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение