У меня есть сервер, который позволяет соединения RMI. Он предоставляет объект «Сервер» в реестре для удаленных вызовов, который имеет метод «authenticate». Этот метод в случае успеха возвращает объект «пользователь». Этот пользовательский объект может затем использоваться клиентом для получения некоторых данных.Безопасность и дизайн RMI
Это выглядит следующим образом: тогда
RMIServer server = new RMIServer();
Naming.rebind("rmi://"+ hostName +"/" + AUTH_OBJECT_BINDING, server);
RMIServer имеет метод:
public InterfaceUser Authenticate(String username, String password);
Этот метод проверяет имя пользователя/PW и возвращает объект пользователя (на самом деле интерфейс). Пользовательский объект сохраняет строку, содержащую имя пользователя, и список разрешений. Затем это можно проверить при вызове других методов дальше по строке.
Мой вопрос заключается в следующем:
Кто-то хочет, чтобы разработать (другой) клиента для сервера, чтобы сделать это, я бы им интерфейсы, необходимые для взаимодействия с ним (например, интерфейс InterfaceUser, а а также другие). Мне нужно было бы создать поддельный сервер разработки, чтобы позволить им сделать это, к которому они могут подключиться. Возможно ли, чтобы этот разработчик использовал интерфейсы, чтобы позволить ему получить экземпляр «InterfaceUser» с реального сервера без правильной аутентификации? Например, Боб регистрируется на реальном сервере, сервер создает объект User, который реализует InteraceUser. Может ли Алиса с интерфейсами захватить этот объект или найти его как-нибудь в реестре? Все остальные объекты экспортируются на один и тот же порт (если это имеет значение).
Или может ли Алиса пройти аутентификацию поддельным сервером, а затем каким-то образом использовать ее для доступа к реальному серверу? Предположим, что все имена пользователей/пароли различны на «реальном сервере» и «сервере разработки»
Спасибо, любая помощь приветствуется.
Думаю, что да, и это тоже хорошие новости. Это то, что я изначально думал при проектировании системы, но имел некоторые сомнения, поскольку никогда не предполагалось, что интерфейсы будут переданы третьей стороне (и поэтому это было не очень важно во время моего планирования). – ThePerson