Расскажите про микросервис авторизации и его интеграцию с другими сервисами
Что проверяют
Понимаете ли вы разницу между аутентификацией и авторизацией и умеете ли объяснить, как решение про токены расползается по всей системе. Проверяют не знание слова OAuth2, а то, сможете ли вы рассказать про свой сервис: где хранится состояние, кто проверяет токен, что происходит при увольнении пользователя.
Как отвечать
Расскажите схему по шагам, как она работает у вас.
- Вход: сервис сверяет пароль с хешем (bcrypt или argon2, не обратимое шифрование), выдаёт короткоживущий access-токен и долгоживущий refresh.
- Формат: JWT с асимметричной подписью, публичный ключ сервисы забирают по JWKS и проверяют подпись локально. В этом и смысл JWT, не ходить в сервис авторизации на каждый запрос.
- Содержимое токена: идентификатор пользователя, срок жизни, роли или права, идентификатор ключа. То, что меняется часто, в токен не кладут.
- Кто что решает: шлюз отбрасывает запросы без валидной подписи, а решение «можно ли этому пользователю этот объект» остаётся в доменном сервисе, только он знает про владение ресурсом.
- Отзыв: access живёт минуты, refresh хранится в базе и отзывается, при смене пароля поднимается версия токена и старые перестают проходить.
- Между сервисами: отдельный поток client credentials или mTLS, пользовательский токен без нужды вниз не пробрасывают.
На Python это обычно FastAPI с зависимостью, проверяющей токен, плюс библиотека для JWT. Добавьте про ограничение попыток входа и про тесты, которые гоняют реальную подпись.
Где спотыкаются
Путают аутентификацию и авторизацию, называя весь сервис «авторизацией». Первое отвечает на вопрос «кто ты», второе «что тебе можно», и часто это разные компоненты.
Говорят, что каждый сервис спрашивает у сервиса авторизации, валиден ли токен. Так делают, но тогда JWT не нужен, хватит непрозрачных токенов, а сервис авторизации становится единой точкой отказа.
Не могут ответить, как отозвать уже выданный токен. JWT самодостаточен: пока не истёк срок, он валиден. Отсюда короткий срок жизни, список отозванных или версия ключа, а не «удалим запись из базы».