фонИспользование Zuul в качестве шлюза аутентификации
Я хочу реализовать проект, представленный в этом article.
Это можно суммировать по приведенной ниже схеме:
- Клиент первой аутентификации с IDP (OpenID Connect/OAuth2)
- ВПЛ возвращает маркер доступа (непрозрачный маркер без каких-либо информации о пользователе)
- клиента делает вызов через шлюз API использовать маркер доступа в авторизации заголовке
- шлюз по API делает запрос к МВУ с маркерами доступа
- IDP проверяет, что токен доступа действителен и возвращает информацию о пользователе в формате JSON.
- Шлюз API хранит информацию пользователя в JWT и подписывает ее с помощью закрытого ключа. JWT затем передается вниз по течению службы, которая подтверждала JWT с использованием открытого ключа
- Если служба должна вызвать другую услугу, чтобы выполнить запрос, он проходит в JWT, вдоль которой служит аутентификации и авторизации для запроса
То, что я до сих пор
у меня есть большинство, что сделано с помощью:
- весна облако в глобальных рамках
- Spring загрузки для запуска отдельных сервисов
- Netflix Zuul в качестве шлюза API
Я также написал фильтр Zuul PRE, который проверяет маркер доступа, контактирует с МВУ и создать JWT. Затем JWT добавляется в заголовок для запроса, перенаправленного в нисходящую службу.
Проблема
Теперь мой вопрос достаточно специфичен для Zuul и его фильтров. Если по какой-либо причине аутентификация не удалась в шлюзе API, как я могу остановить маршрутизацию и напрямую ответить на 401, не продолжая цепочку фильтров и переадресацию вызова?
В настоящий момент, если аутентификация не удалась, фильтр не добавит JWT в заголовок, а 401 будет поступать из нисходящей службы. Я надеялся, что мои шлюзы могут помешать этому ненужному звонку.
Я попытался посмотреть, как я мог бы использовать com.netflix.zuul.context.RequestContext
, но документация довольно плохая, и я не мог найти способ.
Почему вы не используете Spring Cloud Security для этого? который предоставляет этот готовый вариант для afaik. –
@ M.Deinum Я не думал, что у меня хватит сил для реализации этого конкретного дизайна. Мне нужно иметь токен доступа за пределами моей защищенной сети и JWT внутри. У меня нет большого опыта в безопасности Spring Cloud. Как вы думаете, я могу использовать его для достижения моего дизайна? – phoenix7360
Spring Cloud Security только передает тот же токен сервисам нисходящего потока. У него нет возможности обменивать или увеличивать токены, как это делает @ phoenix7360. Тем не менее, это разумный строительный блок для работы. –