Использование Sanctum с обычной Laravel аутентификацией - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть простое веб-приложение, использующее обычную аутентификацию для всех моих веб-маршрутов. В моем приложении есть несколько мест, где я хочу иметь возможность вызывать несколько маршрутов API с Javascript. Могу ли я настроить SPA-аутентификацию Sanctum для работы без входа в стиле SPA?

Я следовал инструкциям на стороне сервера, и на своей странице входа я выполняю запрос CSRF cook ie с использованием топора ios библиотека перед входом пользователя по стандартным маршрутам. Но когда я пытаюсь перейти по защищенному маршруту Sanctum, меня просто перенаправляют на домашнюю страницу.

Ожидается ли, что основанная на сеансе аутентификация Sanctum будет работать с обычным входом в приложение?

Редактировать

Я нашел проблему. В EnsureFrontendRequestsAreStateful есть эта функция:

public static function fromFrontend($request)
{
    $referer = Str::replaceFirst('https://', '', $request->headers->get('referer'));

    $referer = Str::replaceFirst('http://', '', $referer);

    return Str::startsWith($referer, config('sanctum.stateful', [])) ||
           Str::is(config('sanctum.stateful', []), $referer);
}

$referer пусто по моим запросам, поэтому эта функция не может вернуть true. Если 'referer' изменен на 'host', он работает. Это приемлемо? Удовлетворяет ли он еще смысл функции: «данный запрос поступил от внешнего интерфейса приложения» или есть какие-то последствия для безопасности, которые я не рассматривал?

1 Ответ

0 голосов
/ 15 апреля 2020

«Реферер» работает при попадании в конечную точку API из Javascript, но при попадании в Postman или в окне браузера не существует заголовков. Таким образом, в простом GET-тестировании он перенаправляет на вход в систему, но работает нормально при вызове из библиотеки Ax ios в компоненте Vue.

...