Заголовки аутентификации Windows без.NET. Возможный?
Мне было интересно, если кто-нибудь знает способ использовать проверку подлинности Windows без размещения на сайте ASP. Это интранет с доступом к LDAP, поэтому мне интересно, есть ли способ заставить клиента предоставить мне данные, как если бы они поступали с сайта ASP. Мне просто нужен домен для входа и имя пользователя, и я могу запустить оттуда. Использование Node.js в Ubuntu. У кого-нибудь есть опыт работы с этим?
4 ответа
Обновление: теперь есть модуль, который реализует встроенную аутентификацию Windows.
В вашем 401
ответ, вам необходимо предоставить WWW-Authenticate
заголовок со значением NTLM
, который сообщает браузерам, что им нужно отправить учетные данные Windows.
response.writeHead(401, {
'WWW-Authenticate': 'NTLM',
});
Затем вы получите удовольствие от внедрения аутентификации NTLM. Цитируя этот документ о протоколе аутентификации NTLM:
Клиент запрашивает защищенный ресурс с сервера:
GET /index.html HTTP/1.1
Сервер отвечает
401
статус, указывающий, что клиент должен пройти аутентификацию.NTLM
представлен как поддерживаемый механизм аутентификации черезWWW-Authenticate
заголовок. Как правило, сервер закрывает соединение в это время:HTTP/1.1 401 Unauthorized WWW-Authenticate: NTLM Connection: close
Обратите внимание, что Internet Explorer будет выбирать NTLM, только если это первый предложенный механизм; это противоречит RFC 2616, в котором говорится, что клиент должен выбрать самую надежную поддерживаемую схему аутентификации.
Клиент повторно отправляет запрос с
Authorization
заголовок, содержащий параметр сообщения типа 1. Сообщение типа 1 кодируется Base-64 для передачи. С этого момента соединение остается открытым; закрытие соединения требует повторной аутентификации последующих запросов. Это означает, что сервер и клиент должны поддерживать постоянные соединения через заголовок "Keep-Alive" в стиле HTTP 1.0 или HTTP 1.1 (в котором постоянные соединения используются по умолчанию). Соответствующие заголовки запроса выглядят следующим образом:GET /index.html HTTP/1.1 Authorization: NTLM TlRMTVNTUAABAAAABzIAAAYABgArAAAACwALACAAAABXT1JLU1RBVElPTkRPTUFJTg==
Сервер отвечает с
401
статус, содержащий сообщение типа 2 вWWW-Authenticate
заголовок (опять же, в кодировке Base-64). Это показано ниже.HTTP/1.1 401 Unauthorized WWW-Authenticate: NTLM TlRMTVNTUAACAAAADAAMADAAAAABAoEAASNFZ4mrze8AAAAAAAAAAGIAYgA8AAAARABPAE0AQQBJAE4AAgAMAEQATwBNAEEASQBOAAEADABTAEUAUgBWAEUAUgAEABQAZABvAG0AYQBpAG4ALgBjAG8AbQADACIAcwBlAHIAdgBlAHIALgBkAG8AbQBhAGkAbgAuAGMAbwBtAAAAAAA=
Клиент отвечает на сообщение типа 2 повторной отправкой запроса с
Authorization
заголовок, содержащий закодированное в Base-64 сообщение типа 3:GET /index.html HTTP/1.1 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGoAAAAYABgAggAAAAwADABAAAAACAAIAEwAAAAWABYAVAAAAAAAAACaAAAAAQIAAEQATwBNAEEASQBOAHUAcwBlAHIAVwBPAFIASwBTAFQAQQBUAEkATwBOAMM3zVy9RPyXgqZnr21CfG3mfCDC0+d8ViWpjBwx6BhHRmspst9GgPOZWPuMITqcxg==
Наконец, сервер проверяет ответы в сообщении типа 3 клиента и разрешает доступ к ресурсу.
HTTP/1.1 200 OK
Получить имя пользователя пользователя должно быть достаточно просто - оно отправляется в виде простого текста в сообщении типа 3. На самом деле подтверждение того, что они предоставили правильный пароль, - это совсем другое дело. Реализация всего этого остается в качестве упражнения для читателя.
Если вы используете Ubuntu, сделайте
sudo apt-get ntlmaps
или скачайте 'ntlmaps-xx-xx.deb'
и настройте свой прокси-сервер, который будет запрашивать ваш домен, имя пользователя и пароль.
Затем запустите ntlmaps в качестве вашего прокси. Ntlmaps будет аутентифицироваться, используя ваше имя пользователя и пароль. Вы пишете любую программу ntlmaps автоматически аутентифицирует вашу программу, используя данные вашей конфигурации. Однако есть несколько вещей, которые необходимо настроить после установки ntlmaps. Сначала дайте мне знать, если это то, что вы ищете?
Вы можете использовать модуль NTLM в Apache или настроить скрипт в IIS для сбора информации о входе в систему и размещения ее на своем сайте node.js.
Попробуйте Apache mod_ntlm или mod_auth_ntlm_winbind.
В Ubuntu:
root@eruditorum.org:~# apt-cache search ntlm apache
libapache2-authenntlm-perl - Perform Microsoft NTLM and Basic User Authentication
root@eruditorum.org:~# apt-cache show libapache2-authenntlm-perl
Package: libapache2-authenntlm-perl
Priority: optional
Section: universe/perl
Installed-Size: 192
Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
Original-Maintainer: Debian Perl Group <pkg-perl-maintainers@lists.alioth.debian.org>
Architecture: amd64
Version: 0.02-5
Depends: libapache2-mod-perl2, libc6 (>= 2.4), perl (>= 5.10.0-9), perlapi-5.10.0
Conflicts: libauthen-smb-perl (<= 0.96)
Filename: pool/universe/liba/libapache2-authenntlm-perl/libapache2-authenntlm-perl_0.02-5_amd64.deb
Size: 51418
MD5sum: 46f74ac156f7006d8d71ddbf00097e46
SHA1: 133aebf896156929d364950c2772c3e1344b9c9b
SHA256: 0688b38ab145f888a4d111aad12cb7f201dcd6e12ed969af697d3fec4a55c428
Description: Perform Microsoft NTLM and Basic User Authentication
The purpose of this module is to perform a user authentication via Microsoft's
NTLM protocol. This protocol is supported by all versions of the Internet
Explorer and is mainly useful for intranets. Depending on your preferences
setting IE will supply your windows logon credentials to the web server
when the server asks for NTLM authentication. This saves the user to type in
his/her password again.
.
The NTLM protocol performs a challenge/response to exchange a random number
(nonce) and get back a md4 hash, which is built from the user's password
and the nonce. This makes sure that no password goes over the wire in plain
text.
.
The main advantage of the Perl implementation is, that it can be easily
extended to verify the user/password against other sources than a windows
domain controller.
.
The default implementation is to go to the domain controller for the given
domain and verify the user. If you want to verify the user against another
source, you can inherit from Apache2::AuthenNTLM and override it's methods.
Homepage: http://search.cpan.org/dist/Apache2-AuthenNTLM
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu