2010-07-21 6 views
2

Я работал над проектом, который использует SPNEGO для единого входа для Java-приложения на основе Java. В настоящий момент он успешно работает с Jetty + SPNEGO и Active Directory, поэтому, если вы заходите на мою тестовую страницу, она может выводить auth_user, а также токен Negotiate, если браузер настроен правильно.Одиночный вход с Java + Exchange 2007 EWS

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

Я запустите JAX-WS для создания файлов-заглушек из файла Services.wsdl и сможете подключиться к Exchange с использованием этих классов. Единственная проблема заключается в том, что он будет только аутентифицировать пользователя, который запускает веб-сервер, а не удаленного пользователя.

Я также заметил, что я не могу найти правильный класс для передачи токена, а не имени пользователя и пароля для EWS. Кроме того, сгенерированные файлы не имеют ссылок на SPNEGO.

Кто-нибудь знает о возможном решении или похоже, что мне придется генерировать вызовы SOAP вручную, а не использовать сгенерированные классы?

Спасибо за ваше время

ответ

0

Нам удалось запустить решение и запустить его с использованием библиотеки Apache HTTP Client 4.1 alpha/Samba JCIFS и создания SOAP-запросов. Это позволяет нам регистрировать несколько пользователей без какой-либо конфигурации, необходимой для их учетной записи Exchange.

Мы использовали HttpClient 3.1, но столкнулись с проблемами из-за изменения протокола NTLM с более новыми версиями окон, поэтому мы обновили его до последней версии.

+0

Итак, вы используете описанный здесь метод? http://hc.apache.org/httpcomponents-client-4.0.1/ntlm.html Как вы определяете пароль каждого пользователя для вызова? – Soundlink

1

Я думаю, лучший способ аутентификации против СЗПА является использование пользователя, работающий под управлением веб-сервер. Это ваша «учетная запись службы» для веб-служб Exchange. Для этой учетной записи нужна привилегия «Олицетворение веб-служб Exchange» (ms-Exch-EPI-Impersonation).

Если вы хотите получить доступ к данным удаленного пользователя, вам необходимо использовать «обмен олицетворением» в ваших звонках. Для пользователя индивидуального сервера обмена («Act As Account») вы должны разрешить учетной записи службы, чтобы он мог олицетворять их настройками, привилегия «Разрешить олицетворение персональной информации Exchange» (ms-Exch-EPI-May-Impersonate).

Таким образом, каждый вызов аутентифицируется с использованием одной и той же учетной записи службы, но затем вы действуете как конкретный пользователь/почтовый ящик с использованием обменного олицетворения в ваших вызовах.

Единый вход в ваш webapp используется для определения текущей «Активной учетной записи», используемой для олицетворения обмена. Для этого вам нужен адрес электронной почты пользователей или SID.

+0

В какой-то момент мне пришлось генерировать фактические запросы SOAP программно _without_ с помощью wsdl. У нас были проблемы с регистрацией различных пользователей из-за использования java.net.Authenticator для сохранения учетных данных. Я бы сказал, что весь метод wsdl/axis или jax-ws из-за этого испорчен. Я попытался повторно использовать токены SPNEGO, но из-за того, что я его не генерировал, он всегда терпел неудачу. – Paul

+0

Аутентификатор инициализируется только при первом вызове, поэтому он должен быть пользователем веб-сервера, вашей учетной записи службы для EWS. Я не думаю, что здесь можно использовать каждого отдельного удаленного пользователя. Затем вы должны использовать Exchange Impersonation для совершения вызовов.Я думаю, что этот механизм идентичен, если вы используете wsdl для создания прокси-классов или программных запросов SOAP. – Soundlink

Смежные вопросы