Получить имя пользователя клиента, подключенного к веб-серверу

вот сценарий. Я кода на веб-сервере в домене AD. Какой-то клиент связался со мной. Как я могу получить имя пользователя этого клиента, не имея клиента заполнить форму в своем браузере? Необходимо использовать технологии Java на стороне веб-сервера.

edit:

Я закончил использование фильтра Spring Security Negotiate, как описано ниже по ссылке. Есть учебник. Используя запрос.getPrincipal().getName () внутри сервлета дает имя пользователя.

http://waffle.codeplex.com/

5 ответов


вам нужно настроить расширение Kerberos Spring Security - это единственный из коробки способ сделать то, что вы описываете в Spring Security 3. Это поддерживает согласование SPNEGO, но требует некоторой настройки на сервере (и знания того, как работает SPNEGO и Kerberos).

не так много документации, но примеры приложений Майка, которые он отправляет с 1.0M2 велики и охватывают большинство распространенных сценариев, включая автоматизированные SPNEGO идентификация.

главное для spnego в настройка AuthenticationEntryPoint - вам нужно сделать это с помощью пользовательского spring bean следующим образом:

<bean id="kerbEntryPoint" class="org.springframework.security.extensions.kerberos.web.SpnegoEntryPoint" />

<bean id="kerbAuthenticationProcessingFilter" class="org.springframework.security.extensions.kerberos.web.SpnegoAuthenticationProcessingFilter">
    <property name="authenticationManager" ref="authenticationManager" />
</bean>

... есть больше бобов, которые будут необходимы, кроме этих (опять же, обратитесь к образцам с расширением Kerberos). Сообщение назад, если вы получаете дальше вместе с Spring Security или если вы хотите точные данные (поскольку есть несколько битов beans / config, некоторые знания вашей конфигурации были бы полезны, такие как Как ли вы используете <http> стиль пространства имен или нет).

кроме этой опции, вам придется настроить аналогичный тип spnego auth (например, с помощью вафли, как вы предлагаете) -другие так вопросы крышка это очень хорошо.

наконец, вы можете использовать Tomcat с другим веб-сервером, который лучше поддерживает SPNEGO или NTLM, например Microsoft IIS или Apache Web Server с mod_spnego.

Надеюсь, один из этих идеи будут работать для вас!


какой браузер используют ваши пользователи? Если IE; есть простое решение:

<html>
<script type="text/javascript">
var WinNetwork = new  ActiveXObject("WScript.Network");
alert(WinNetwork.UserName);
</script>
</html>

последний способ для Windows, чтобы сделать это SPNEGO. Чтобы он работал полностью, вам нужно, чтобы сервер имел учетную запись в AD и общался с Kerberos. Тогда Spring Security, как мне сказали, поддерживает это.

теперь не всегда вам нужно авторизовать пользователей. Иногда (например, по причинам статистики) достаточно получить идентификатор объявления пользователя. Когда я играл с SPNEGO, двоичные данные, которые были переданы из браузера, включали идентификатор пользователя в чистый текст. Это может быть выдержка оттуда, но доверять, конечно, нельзя.

NTLM устарел, считается менее безопасным и в значительной степени выкатывается из среды.


Если вы используете Tomcat, то используйте вафельницы.


Я уверен, что вы можете поставить веб-сервер Apache перед tomcat, чтобы apache мог аутентифицироваться с помощью NTLM или Kerberos. Затем вы можете использовать правила перезаписи для отправки запросов tomcat с именем пользователя на равнине. Это просто идея, я не реализовал ее сам. Однако мы используем аутентификацию Apache Kerberos в нашей интрасети. Мое предложение-не использовать NTLM, он устарел и шелушится.