Сведения о вопросе

FELL

13:14, 1st August, 2020

Теги

Как использовать проверку подлинности NTLM с Active Directory

Просмотров: 831   Ответов: 7

Я пытаюсь реализовать аутентификацию NTLM на одном из наших внутренних сайтов,и все работает. Единственный кусочек головоломки, которого у меня нет, - это то, как взять информацию из NTLM и пройти аутентификацию в Active Directory.

Существует хорошее описание NTLM и шифрования, используемого для паролей, которые я использовал для реализации этого, но я не уверен, как проверить, является ли пароль пользователя действительным.

Я использую ColdFusion, но решение этой проблемы может быть на любом языке (Java, Python, PHP и т. д.).

Редактировать:

Я использую ColdFusion на Redhat Enterprise Linux. К сожалению, мы не можем использовать IIS для управления этим и вместо этого должны написать или использовать сторонний инструмент для этого.


Update - я получил эту работу, и вот что я сделал

Я пошел с библиотекой JCIFS из samba.org.

Обратите внимание, что приведенный ниже метод будет работать только с NTLMv1 и не работает с NTLMv2. Если вы не можете использовать NTLMv1, вы можете попробовать Jespa, который поддерживает NTLMv2, но не является открытым исходным кодом, или вы можете использовать Kerberos/SPNEGO.

Вот мой web.xml:

<web-app>
    <display-name>Ntlm</display-name>

    <filter>
        <filter-name>NtlmHttpFilter</filter-name>
        <filter-class>jcifs.http.NtlmHttpFilter</filter-class>

        <init-param>
            <param-name>jcifs.http.domainController</param-name>
            <param-value>dc01.corp.example.com</param-value>
        </init-param>
        <init-param>
            <param-name>jcifs.smb.client.domain</param-name>
            <param-value>CORP.EXAMPLE.COM</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>NtlmHttpFilter</filter-name>
        <url-pattern>/admin/*</url-pattern>
    </filter-mapping>
</web-app>

Теперь все URLs совпадающие /admin/* будут требовать NTLM аутентификации.



  Сведения об ответе

VERSUION

07:43, 21st August, 2020

На самом деле вы спрашиваете: существует ли какой-либо способ проверить токены "WWW-Authenticate: NTLM", представленные IE и другими клиентами HTTP, при выполнении единого входа (SSO). SSO - это когда пользователь вводит свой пароль в "single" раз, когда он делает Ctrl-Alt-Del, и рабочая станция запоминает и использует его по мере необходимости для прозрачного доступа к другим ресурсам без повторного запроса пароля у пользователя.

Обратите внимание, что Kerberos, как и NTLM, может также использоваться для реализации проверки подлинности SSO. При наличии заголовка "WWW-Authenticate: Negotiate", IE и другие браузеры будут отправлять SPNEGO обернутых Kerberos и / или NTLM токенов. Подробнее об этом позже, но сначала я отвечу на заданный вопрос.

Единственный способ проверить пароль NTLMSSP "response" (как и те, которые закодированы в заголовках "WWW-Authenticate: NTLM", отправленных IE и другими браузерами) - это вызов NetrLogonSamLogon(Ex) DCERPC со службой NETLOGON контроллера домена Active Directory, который имеет полномочия для целевой учетной записи или имеет полномочия для "trust". Кроме того, чтобы должным образом защитить связь NETLOGON, необходимо использовать шифрование защищенного канала, которое требуется начиная с Windows Server 2008.

Излишне говорить, что существует очень мало пакетов, которые реализуют необходимые вызовы службы NETLOGON. Единственные, о ком я знаю, это:

  1. Windows (конечно)

  2. Samba - Samba-это набор программных программ для UNIX, реализующих ряд протоколов Windows, включая необходимые вызовы служб NETLOGON. На самом деле, Samba 3 имеет специальный демон для этого под названием "winbind", с которым могут взаимодействовать другие программы, такие как модули PAM и Apache. В системе Red Hat вы можете сделать yum install samba-winbind и yum install mod_auth_ntlm_winbind . Но это самая легкая часть-настройка этих вещей-это совсем другая история.

  3. Jespa-Jespa ( http://www.ioplex.com/jespa.html) - это библиотека 100% Java, которая реализует все необходимые вызовы службы NETLOGON. Он также предоставляет реализацию стандартных интерфейсов Java для аутентификации клиентов различными способами, такими как фильтр сервлетов HTTP, сервер SASL, JAAS LoginModule и т. д.

Остерегайтесь, что есть ряд акцепторов аутентификации NTLM, которые не реализуют необходимые вызовы службы NETLOGON, а вместо этого делают что-то еще, что в конечном итоге приводит к сбою в том или ином сценарии. Например, в течение многих лет способ сделать это в Java был с фильтром сервлета аутентификации NTLM HTTP из проекта под названием JCIFS. Но этот фильтр использует метод man-in-the-middle, который был ответственен за давнюю "hiccup bug" и, что более важно, он не поддерживает NTLMv2. По этим и другим причинам его планируется удалить из JCIFS. Есть несколько проектов, которые были непреднамеренно вдохновлены этим пакетом, но теперь также обречены на провал. Есть также много фрагментов кода, опубликованных на форумах Java, которые декодируют маркер заголовка и вырывают домен и имя пользователя, но абсолютно ничего не делают для проверки ответов на пароль. Достаточно сказать, что если вы используете один из этих фрагментов кода, Вы можете также ходить со спущенными штанами.

Как я уже упоминал ранее, NTLM - это только один из нескольких поставщиков поддержки безопасности Windows (SSP). Есть ТАКЖЕ Дайджест SSP, Kerberos SSP и т. д. Но Negotiate SSP, который также известен как SPNEGO, обычно является поставщиком, который MS использует в своих собственных клиентах протокола. Согласование SSP на самом деле просто договаривается либо проверки подлинности NTLM или Kerberos SSP SSP. Обратите внимание, что Kerberos можно использовать только в том случае, если и сервер, и клиент имеют учетные записи в целевом домене и клиент может связаться с контроллером домена достаточно для получения билета Kerberos. Если эти условия не выполняются, то NTLM SSP используется непосредственно. Так что NTLM ни в коем случае не устарел.

Наконец, некоторые люди упоминали об использовании LDAP "simple bind" в качестве службы проверки паролей на случай смены пароля. LDAP на самом деле не разработан как служба аутентификации, и по этой причине он не является эффективным. Также невозможно реализовать SSO с помощью LDAP. SSO требует NTLM или SPNEGO. Если вы можете найти акцептор NETLOGON или SPNEGO, вы должны использовать его вместо этого.

Майк


  Сведения об ответе

PAGE

16:55, 15th August, 2020

Как я это понимаю.
NTLM является одним из IIS встроенных методов аутентификации. Если хост зарегистрирован в домене указанного active directory, он должен быть автоматическим. Одна вещь, которую нужно остерегаться, - это имя пользователя должно быть в одном из двух форматов.

  • domain\username
  • username@domain.tld

Если вы пытаетесь пойти против другого active directory, вы должны использовать аутентификацию в стиле форм и некоторый код LDAP.

Если вы пытаетесь сделать интрасеть без нулевого входа в систему с помощью встроенной аутентификации IIS

  • домен должен быть указан как надежный сайт в браузере IEx
  • или используйте url, который использует имя netbios вместо имени DNS.
  • чтобы он работал в firefox читайте здесь


  Сведения об ответе

DAAA

05:15, 29th August, 2020

Источник ModNTLM для Apache может предоставить вам правильные указатели.

Если это возможно, вы должны рассмотреть возможность использования Kerberos вместо этого. Это позволяет вам аутентифицировать Apache против AD, и это более активное пространство проекта, чем NTLM.


  Сведения об ответе

ITSME

11:04, 22nd August, 2020

Проверить вафлю . Он реализует SSO для Java сервера с использованием Win32 API. Есть сервлет, клапан tomcat, защита spring и другие фильтры.


  Сведения об ответе

lourence

11:28, 2nd August, 2020

Вы можете разрешить всплывающее окно проверки подлинности Firefox, выполнив следующие действия в Firefox:

  1. Откройте Mozilla Firefox
  2. Введите about:config в адресной строке
  3. Введите network.automatic-ntlm-auth.trusted-uris в поле поиска texfield
  4. Дважды щелкните имя предпочтения и ключ в имени сервера как строковое значение
  5. Закройте вкладку
  6. Перезагрузка Firefox.


  Сведения об ответе

appple

00:21, 27th August, 2020

Хм, я не совсем понимаю, чего ты добиваешься.

Обычно реализация NTLM на внутреннем сайте так же проста, как снятие флажка "Enable Anonymous Access" в "Authentication and Access Control" на вкладке "Directory Security" свойств сайта в IIS. Если этот флажок снят, то пользователи вашего веб-приложения увидят всплывающее диалоговое окно NTLM.

Вам нет необходимости писать какой-либо код, который взаимодействует с Active Directory. IIS позаботится о проверке подлинности для вас.

Можете ли вы быть более конкретным в том, что вы пытаетесь сделать?


  Сведения об ответе

PAGE

08:06, 1st August, 2020

я предполагаю,что вы хотите получить доступ к некоторым атрибутам, которые установлены против LDAP account-role-department и т. д.

для coldfusion проверьте это http://www.adobe.com/devnet/server_archive/articles/integrating_cf_apps_w_ms_active_directory.html

и тег cfldap http://livedocs.adobe.com/coldfusion/6.1/htmldocs/tags-p69.htm#wp1100581

Что касается других языков - другие сделают это с соответствующим APIs


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться