Выдача себя за пользователя из сервлета Java - PullRequest
2 голосов
/ 23 февраля 2010

Учитывая Java-сервлет (работающий на сервере Windows), который создает новый процесс через ProcessBuilder, каковы мои варианты запуска этого нового процесса в качестве пользователя, который вызвал исходный веб-запрос к сервлету?

Чтобы уточнить, что я хочу, это что-то вроде

ProcessBuilder pb = new ProcessBuilder("whoami");
Process p = pb.start();
// p.getOutputStream() should contain the name of the remote user,
// not the user running the app server

И настоящая цель - выполнить некоторые проверки безопасности (скажем, посмотреть, сможет ли пользователь открыть файл или просмотреть такую-то запись во внутренней корпоративной системе).

Очевидно, что пользователь должен будет как-то проходить проверку подлинности, либо сервером приложений, либо java-кодом - в идеале мне бы хотелось, чтобы это каким-то образом работало с единым входом (т.е. без ввода пользователем пароля) и хорошо, если решение работает только от клиентов Windows, которые уже вошли в домен (хотя даже лучше, если это не ограничение). В настоящее время я использую Jetty в качестве сервера приложений, но переключение на что-то другое, безусловно, будет приемлемым вариантом в случае необходимости.

(Если это поможет уточнить, я в основном ищу замену сценария CGI, который в настоящее время использует функции олицетворения IIS для запуска в контексте пользователя, выполняющего запрос)

Ответы [ 2 ]

6 голосов
/ 15 ноября 2010

Project Waffle доставит вас (почти) туда. Он имеет SSO и олицетворение.

2 голосов
/ 23 февраля 2010

Ваш единственный вариант - JNI или какая-то оболочка вокруг JNI, такая как JNA. Вам нужно будет вызвать API O / S, чтобы изменить действующие учетные данные, что также потребует, чтобы сервер приложений работал от имени администратора, что само по себе является важным фактором безопасности.

Я не знаю конкретно о Windows API, но большинство O / S имеют возможность достаточно мощного профиля (admin / root), чтобы принять идентичность любого профиля пользователя без пароля. В противном случае, как правило, единственный способ получить токен профиля пользователя - предоставить действительные учетные данные для аутентификации для этого профиля.

Следует быть осторожным, если вы хотите изменить учетные данные для потока, а не для всего процесса.

...