Я пытаюсь аутентифицировать вызовы API в моем приложении laravel 5.7. Я установил Passport, следуя документации, и думаю, что ничего не пропустил. Каждый вызов API возвращает 401 не прошедших проверку подлинности.
Отладка Я обнаружил, что проблема в том, что токен csrf, зашифрованный в cookie (после его расшифровки), не соответствует заголовку csrf из запроса. Я знаю это, потому что я выгружаю $this->validCsrf($token, $request)
внутри getTokenViaCookie($request)
метода в vendor / laravel / passport / src / Guards / TokenGuard.php и его значение равно false.
Я не могу думать, что я делаю неправильно.
В моем layout.blade.php
я добавляю <meta name="csrf-token" content="{{ csrf_token() }}">
В Kernel.php
Я добавляю \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class
после \App\Http\Middleware\EncryptCookies::class
И в телескопе я вижу в запросе, что там есть заголовок x-xsrf-token
и cookie laravel_token
.
Приветствуется любая идея о том, в чем может быть проблема, или любой способ ее устранения.
Я глубже изучил код, я вижу, что токен, зашифрованный и сохраненный в cookie , кажется, является токеном сеанса . В паспорте / src / Http / Middleware / CreateFreshApiToken.php:
public function handle($request, Closure $next, $guard = null)
{
$this->guard = $guard;
$response = $next($request);
if ($this->shouldReceiveFreshToken($request, $response)) {
$response->withCookie($this->cookieFactory->make(
$request->user($this->guard)->getKey(), $request->session()->token()
));
}
return $response;
}
Похоже, моя проблема в том, что зашифрованный токен является сессионным, затем сравнивается с заголовком csrf и, конечно, аутентификация не проходит.
Я удивляюсь, если это нормальное поведение и я что-то упускаю Или это неправильно?