Какая сущность в symfony security и Lexik JWT Bundle проверяет логин/пароль при входе?

Здравствуйте, сразу опишу задачу: необходимо написать свой сервис, который будет проверять логин пароль юзера(как в api/login_check при использовании Lexik JWT Bundle) и возвращать стандартный jwt токен.

Задача минимум - понять, как работает security и Lexik JWT, задача максимум, реализовать проверку логин/пароль своим классом и встроить в security.

Но я не могу понять, кто конкретно проверяет логин пароль в Lexik JWT Bundle. Пока удалось отследить маршрут до Symfony\Component\Security\Http\Authenticator\JsonLoginAuthenticator, метод authenticate, который возвращает Passport(внутри есть логин, пароль, и другие параметры из входящего json) и onAuthenticationSuccess, в котором уже сгенерирован jwt токен.

Отсюда следующие вопросы:
1) Кто проверяет логин-пасс между authenticate и onAuthenticationSuccess в JsonLoginAuthenticator
2) Как вообще стоит действовать, если нужна своя проверка логина и пароля. Пароль тут условно, допустим пароль нужно заменить на другое поле, аля код смс. Но речь не про двухфакторную авторизацию. И не проверку апи ключа на каждом запросе.

Использую симфони 7
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 1
myks92
@myks92
Нашёл решение — пометь вопрос ответом!
Зачем вам разбираться, как работает сложный бандл. Вам нужно разобраться как это сделать минимальными усилиями. Могу лишь подсказать как это сделать. Потому что описывать как работает бандл долго и ни к чему.

1. Делаете новый роут и в нем проверяете входящие данные. Если это логин и код из смс, то ищете эту связку в базе и если нашлась, то формируете JWT и отдаете frontend приложению.
2. Делаете Аутентификатор, который берет заголовок токена из запроса, извлекает из него токен и проверяет его на различную валидацию: подпись, срок действия и т д

Ну а дальше если есть вопросы можете написать их в комментариях.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы