Я вернулся, чтобы поделиться своими мыслями о выборе, сделанном вокруг темы поста.Путь, которым я следовал, - это
Шлюз API знает о данных аутентификации, отправляемых вместе с запросами («заголовок авторизации» на практике), и выполняет проверки.JWT несут всю необходимую информацию, поэтому шлюз api может применять свои политики, которые неизвестны для нисходящих сервисов.
В моей архитектуре есть некоторый RBAC, который не может быть помещен в jwt, поэтомумы переместили логику контроля доступа на шлюз.Мы адаптировали пользовательскую библиотеку nodejs в качестве плагина, но я должен признать, что это испортило наш шлюз, и мы обнаружили, что конфигурация authz медленная и подвержена ошибкам.С этой стороны мы платим за отсутствие интеграции с основной информацией о конфигурации.было бы полезно что-то вроде
routes:
- route1:
path: /foos/:fooid/bar
downstreamService: http://foo.cluster
authz:
readerRole:
- GET
writerRole:
- POST
all:
- OPTIONS
Однако шлюз Api не может делать все сам по себе: необходимо связаться с тем, как я называю услуги «провайдера идентификации», те, кто инкапсулирует, дают право моделировать концепцию «потребителей»в платформу: пользователь, устройство, приложение.Наш шлюз API выполняет GET для идентификации на основе данных JWT, чтобы убедиться, что идентификация существует и все в порядке.Кроме того, генерация / обновление токенов не относится к API-шлюзу, но существует сервер аутентификации (один автономный, другой все еще встроен в монолит), который связан друг с другом.Все это создает большую нагрузку, но это может быть легко смягчено с помощью кэширования "identifites".просто знайте, чтобы сделать кэш недействительным, когда идентифицируются идентификаторы, или, по крайней мере, постарайтесь использовать как можно меньше информации, чтобы вы могли просто позаботиться об удалении идентификаторов
Следующие шаги для нас будут заключаться в том, чтобы сделать / купитьболее структурированный аутентификационный сервер, который будет интегрирован со шлюзом, но способен масштабироваться независимо, более понятен и прост в настройке, возможно, с каким-то пользовательским интерфейсом
Как нативный поклонник облака, я также смотрел на istio , который имеет, помимо прочего, функции аутентификации, но все же мне нужно понять, подходит ли мой подход, требующий возможности небольшой настройки