Как ограничить доступ к методу RestController для определенных клиентов

Клиентское приложение с указанной ниже конфигурацией сервера в приложение.свойства отправляет запрос моему приложению, используя restTemplate:

server.address=localhost
server.port=8081

Мое приложение знает IP-адрес и порт клиента.

Как проверить, что запрос, полученный моим приложением, от этого конкретного клиента?

Я пытался получить порт клиента с помощью HttpServletRequest request -> request.getRemotePort(), но он выдает случайные номера портов.

хотите получить IP-адрес и порт удаленного клиента?

TongChen 09.03.2019 09:13

да. Это необходимо для ограничения доступа к некоторым действиям. Только клиенты с определенным IP+портом могли выполнять некоторые методы

Donatello 09.03.2019 09:17

удаленный клиент использует новый случайный порт для подключения к вашему серверу, поэтому я думаю, что использование ip и порта не подходит

TongChen 09.03.2019 09:22

Но как я могу дать доступ только для приложений с определенным ip+port, если у меня есть список клиентских адресов ip+port?

Donatello 09.03.2019 09:28

Если я проверяю только IP, это может быть небезопасно. Кто-то может развернуть свое приложение на том же сервере и получить доступ

Donatello 09.03.2019 09:33

Обратитесь к этому вопрос, чтобы узнать, почему клиент выбирает случайный порт и как выбрать фиксированный порт. Если вы хотите использовать ip и порт для безопасности, я думаю, вы можете использовать другой метод, например токен.

TongChen 09.03.2019 09:38

Вероятно, вы можете управлять этим в локальной сети. Любое другое подключение требует авторизации путем аутентификации (user/pass или аналогичной).

PeterMmm 09.03.2019 10:02

Под клиентом вы подразумеваете какой-то конкретный IP-адрес/хост или некоторых пользователей вашего приложения?

uneq95 09.03.2019 10:43

@ uneq95 действительно, мое приложение представляет собой распределенную службу со многими узлами. Они могут отправлять друг другу запросы и указывать заголовки. Но клиенты могли узнать этот заголовок и сделать мои данные недействительными. Поэтому я думаю, что могу проверить ip+port, чтобы узнать, что этот запрос от одного из моих узлов. Таким образом, даже если бы пользователь знал этот «секретный» заголовок, он не мог бы злоупотребить им.

Donatello 09.03.2019 13:08

Но теперь я думаю, что это невозможно и я должен добавить авторизацию для этого.

Donatello 09.03.2019 13:14

@Donatello Я думаю, что использование авторизации - лучший метод, но когда клиент создает сокет для подключения к вашему серверу, а клиент явно привязывается к локальному адресу, сервер может получить IP и порт, но это не лучший способ.

TongChen 11.03.2019 08:55

@Donatello: вы можете добиться использования белого списка IP-адресов на своем сервере, если вы знаете своего потребителя, а затем установите канал взаимной аутентификации SSL, обе стороны будут совместно использовать сертификат для создания безопасного канала. Отраслевые стандарты, как вы знаете.

Vivek 12.03.2019 20:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
12
168
0

Другие вопросы по теме