Клиентское приложение с указанной ниже конфигурацией сервера в приложение.свойства отправляет запрос моему приложению, используя restTemplate:
server.address=localhost
server.port=8081
Мое приложение знает IP-адрес и порт клиента.
Как проверить, что запрос, полученный моим приложением, от этого конкретного клиента?
Я пытался получить порт клиента с помощью HttpServletRequest request -> request.getRemotePort(), но он выдает случайные номера портов.
да. Это необходимо для ограничения доступа к некоторым действиям. Только клиенты с определенным IP+портом могли выполнять некоторые методы
удаленный клиент использует новый случайный порт для подключения к вашему серверу, поэтому я думаю, что использование ip и порта не подходит
Но как я могу дать доступ только для приложений с определенным ip+port, если у меня есть список клиентских адресов ip+port?
Если я проверяю только IP, это может быть небезопасно. Кто-то может развернуть свое приложение на том же сервере и получить доступ
Обратитесь к этому вопрос, чтобы узнать, почему клиент выбирает случайный порт и как выбрать фиксированный порт. Если вы хотите использовать ip и порт для безопасности, я думаю, вы можете использовать другой метод, например токен.
Вероятно, вы можете управлять этим в локальной сети. Любое другое подключение требует авторизации путем аутентификации (user/pass или аналогичной).
Под клиентом вы подразумеваете какой-то конкретный IP-адрес/хост или некоторых пользователей вашего приложения?
@ uneq95 действительно, мое приложение представляет собой распределенную службу со многими узлами. Они могут отправлять друг другу запросы и указывать заголовки. Но клиенты могли узнать этот заголовок и сделать мои данные недействительными. Поэтому я думаю, что могу проверить ip+port, чтобы узнать, что этот запрос от одного из моих узлов. Таким образом, даже если бы пользователь знал этот «секретный» заголовок, он не мог бы злоупотребить им.
Но теперь я думаю, что это невозможно и я должен добавить авторизацию для этого.
@Donatello Я думаю, что использование авторизации - лучший метод, но когда клиент создает сокет для подключения к вашему серверу, а клиент явно привязывается к локальному адресу, сервер может получить IP и порт, но это не лучший способ.
@Donatello: вы можете добиться использования белого списка IP-адресов на своем сервере, если вы знаете своего потребителя, а затем установите канал взаимной аутентификации SSL, обе стороны будут совместно использовать сертификат для создания безопасного канала. Отраслевые стандарты, как вы знаете.




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