Pull to refresh

Comments 12

На мой взгляд должны быть веские причины, чтобы писать сервер авторизации с нуля вместо использования чего-нибудь вроде spring-security-oauth2-authorization-server

Я так понимаю у вас здесь токен заменяе сессию, поэтому тут jwt токен явно и не нужен.

Всем нравятся JWT, но мало кто умеет их готовить. :) В правильной реализации сервер авторизации только ВЫДАЕТ токены, не НЕ ПРОВЕРЯЕТ их. А проверяют их уже конечные серверы ресуросов без участия сервера авторизации. В этои и есть суть - что это РАСПРЕДЕЛЕННАЯ система.

Вполне правильная практика проверять таким образом, позволяет в любой момент прибить jwt токен, не ждать когда он протухнет. Просто многие ленятся так делать.

Нет, дело не в лени. У jwt токена должно быть не большое время жизни.

Да тут еще и API Gateway своей разработки + передача полномочий в микросервисы в заголовках. То есть любой кто сможет отправить запрос мимо API Gateway получит возможность действовать в сервисах от имени любого пользователя с любыми полномочиями.

Ну такое себе...

С одной стороны да, а с другой это зависит от того, насколько защищенную систему вы хотите построить. Можно и TLS на все межсервисные вызовы навесить, например.

Если не особо нужна защищенность, то зачем было городить проверку каждого запроса через сервис авторизации? Достаточно было классики OAuth2 - выдать JWT токет подписанный и раздать с сервиса авторизации по всем клиентам ключи. Это бы еще и отказоустойчивости добавило и latency снизило.

К архитектуре описанной в статье у меня те же вопросы. Я лишь писал о том, что архитектура, в которой можно вызвать сервис без аутентификации внутри системы, допустима, если нет особых требований к безопасности внутри самой системы.

Если у нас 100+ микросервис, насколько масштабируемо сервис permission учитывая что не все может быть на spring тем более на java? Какой best practice для permission? У каждого сервера своя бд с таблицей для проверки permission, либо как в примере request засетить изначально в api gateway?

Сильно зависит от вашего контекста.

Академически считается правильным, что сервис самостоятельно проверяет все гранты по запросу. А у API Gateway две ответственности: отделить авторизованную зону от неавторизованной, и иногда обогатить запрос приватной информацией, которую не хочется светить в jwt-токене. Конечно, это не аксиома, и при понимании что делаешь, можно от нее отклоняться.

По-моему очень спорное решение. С одной стороны да, у нас в таком кейсе имеется возможность управлять жизненным циклом токена (точнее прерывать его заблаговременно), можем достаточно гибко реагировать на изменения прав пользователей, чуть меньше заморачиваться насчет авторизации.

C другой мы имеем 2 точки отказа + оверхед на походы в auth сревис (можно обмазать кэшeм, но тогда нужно решать 2-ую самую сложную проблему программирования), gateway имеет несколько отвественностей.

ИМХО: такой подход несомненно имеет место быть, только у меня пока к нему всё же больше вопросов.

Sign up to leave a comment.