2014-12-01 1 views
0

У меня есть сервер, который позволяет соединения 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. Может ли Алиса с интерфейсами захватить этот объект или найти его как-нибудь в реестре? Все остальные объекты экспортируются на один и тот же порт (если это имеет значение).

Или может ли Алиса пройти аутентификацию поддельным сервером, а затем каким-то образом использовать ее для доступа к реальному серверу? Предположим, что все имена пользователей/пароли различны на «реальном сервере» и «сервере разработки»

Спасибо, любая помощь приветствуется.

ответ

1
  1. Алиса не может получить объект пользователя, если она не может войти на сервер, который ее предоставляет.
  2. Любой объект пользователя, полученный Алисой, привязан к серверу, который его создал, и не может быть использован на другом сервере. Он даже не выдерживает силовой циклический ход правильного сервера.

Ответил ли это на ваш вопрос?

+0

Думаю, что да, и это тоже хорошие новости. Это то, что я изначально думал при проектировании системы, но имел некоторые сомнения, поскольку никогда не предполагалось, что интерфейсы будут переданы третьей стороне (и поэтому это было не очень важно во время моего планирования). – ThePerson