Helpers - компьютеры, интернет, программирование

Как настроить безопасность RSocket в приложении Spring Boot с помощью Spring Security

RSocket кажется хорошей альтернативой HTTP / S для микросервисной связи. К счастью, Spring Boot уже имеет плавную интеграцию, которая упрощает ее настройку.

Однако мне не хватает информации обо всем, что связано с безопасностью RSocket, как в документации RSocket, так и Spring (Boot, Security).

Мои вопросы:

1) Как мы можем настроить RSocket для использования TLS (в контексте приложения Spring Boot)?

2) Добавляет ли Spring Security какие-либо дополнительные функции к безопасности RSocket? Мне приходят в голову вещи: представьте, что мы хотим распространить токен JWT из одного приложения в другое, как его можно передать и проверить через RSocket?


Ответы:


1

Недавно я написал сообщение о том, как использовать Базовая аутентификация Spring Security с помощью RSocket. Что касается вашего первого вопроса, вы можете использовать TcpClientTransport.create(TcpClient.create().port(7000).secure()) при подключении к RSocketServer.

RSocketRequester.builder()
                .dataMimeType(MimeTypeUtils.APPLICATION_JSON)
                .rsocketStrategies(rSocketStrategies)
                .rsocketFactory(clientRSocketFactory -> {
                    clientRSocketFactory.frameDecoder(PayloadDecoder.ZERO_COPY);
                })
                .setupMetadata(credentials, UsernamePasswordMetadata.BASIC_AUTHENTICATION_MIME_TYPE)
                .connect(TcpClientTransport.create(TcpClient.create().port(7000).secure()))
                .block();

И второй вопрос: при доступе к конечным точкам сообщений RSocket вы можете использовать

        BearerTokenMetadata credentials = new BearerTokenMetadata("jwt-token");
        return rSocketRequester
                .route("taxis")
                .metadata(credentials, BearerTokenMetadata.BEARER_AUTHENTICATION_MIME_TYPE)
                .data(new TaxisRequest(type, from, to))
                .retrieveMono(TaxisResponse.class);

И во время установки RSocketServer для PayloadSocketAcceptorInterceptor вы можете использовать jwt, как показано ниже.

    @Bean
    public PayloadSocketAcceptorInterceptor rsocketInterceptor(RSocketSecurity rsocket) {
        rsocket.authorizePayload(authorize -> {
            authorize
                    // must have ROLE_SETUP to make connection
                    .setup().hasRole("SETUP")
                    // must have ROLE_ADMIN for routes starting with "taxis."
                    .route("taxis*").hasRole("ADMIN")
                    // any other request must be authenticated for
                    .anyRequest().authenticated();
            })
            .jwt(Customizer.withDefaults());

            return rsocket.build();
        }
30.09.2019
  • Спасибо за подробный ответ и отличный пост! 30.09.2019
  • Как настроить конфигурацию ssl на стороне сервера в Spring boot rsocket? 17.11.2019
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..