Создать черный список JWT в Spring Cloud Gateway

Я интегрировал облачный шлюз Spring с логином oauth2. После выхода из scg пользователь все еще может получить доступ к серверу ресурсов, потому что у пользователя есть действующий токен. Мне нужно каким-то образом аннулировать этот действительный токен. в моих исследованиях есть решение из черного списка (https://stackoverflow.com/a/53994938/5079581), и я буду реализовывать это.

Создав фильтр, я беру jwt на шаге «/ logout» и помещаю его в черный список.

public class ExampleWebFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) {
        ServerHttpRequest request = serverWebExchange.getRequest();
        String uri = request.getPath().pathWithinApplication().value();
        HttpHeaders headers = request.getHeaders();
        if(uri.equals("/logout")) {
            List<String> auth = headers.get("Authorization");
        }

        return webFilterChain.filter(serverWebExchange);
    }

}

список авторизации всегда возвращает ноль. Я думаю, что мой фильтр работает до фильтра реле токенов. как я могу получить доступ к JWT на шлюзе? есть ли для этого какой-нибудь образец кода или демонстрация? Спасибо.


person denizg    schedule 05.03.2020    source источник
comment
Не могли бы вы опубликовать свой ответ, если вы уже решили. У меня такая же проблема, и я пытаюсь ее исправить   -  person Naveen    schedule 21.05.2020


Ответы (1)


В весенней интеграции облачного шлюза + безопасности oauth2 JWT хранятся в шлюзе как сеанс. Сначала я подумал, что произошла ошибка при сохранении JWT как сеанса, так как он становится с отслеживанием состояния. Но после выхода из системы этот сеанс удаляется, и JWT больше не существует, поэтому нет необходимости создавать черный список. такой способ работы - отличное решение.

Итак, в чем была моя проблема? У меня было 2 отдельных сервера (шлюз, сервер oauth2). в результате операции создаются две сессии. SESSION для шлюза, JSESSION для сервера oauth2. при выходе из системы на шлюзе удаляется только SESSION, но JSESSION все еще активен. из-за этого шлюз переходит на сервер oauth (и все еще вошел на сервер oauth2) и получите новый JWT.

Чтобы полностью выйти из системы, вам также необходимо одновременно выйти с сервера ouath2.

person denizg    schedule 21.05.2020