Заголовки аутентификации Windows без .NET. Возможный? - PullRequest
5 голосов
/ 14 марта 2011

Мне было интересно, знает ли кто-нибудь о способе использования аутентификации Windows без размещения на сайте ASP. Это интрасеть с доступом к LDAP, поэтому мне интересно, есть ли способ заставить клиента предоставлять мне данные, как если бы они поступали с сайта ASP. Мне просто нужен домен для входа и имя пользователя, и я могу запустить оттуда. Использование Node.js в Ubuntu. Кто-нибудь имеет опыт работы с этим?

Ответы [ 4 ]

9 голосов
/ 28 марта 2011

Обновление: Теперь модуль, который реализует встроенную в Windows аутентификацию .


В ответе 401 необходимо указать заголовок WWW-Authenticate со значением NTLM, который сообщает браузерам, что им необходимо отправлять учетные данные Windows.

response.writeHead(401, {
    'WWW-Authenticate': 'NTLM',
});

Затем вы получите удовольствие от внедрения аутентификации NTLM. Цитирование этого документа о протоколе аутентификации NTLM :


  1. Клиент запрашивает защищенный ресурс с сервера:

    GET /index.html HTTP/1.1
    
  2. Сервер отвечает статусом 401, указывающим, что клиент должен пройти аутентификацию. NTLM представлен как поддерживаемый механизм аутентификации через заголовок WWW-Authenticate. Обычно сервер закрывает соединение в это время:

    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: NTLM
    Connection: close
    

    Обратите внимание, что Internet Explorer будет выбирать NTLM, только если это первый предложенный механизм; это противоречит RFC 2616, в котором говорится, что клиент должен выбрать самую надежную поддерживаемую схему аутентификации.

  3. Клиент повторно отправляет запрос с заголовком Authorization, содержащим параметр Тип сообщения 1 . Сообщение типа 1 кодируется Base-64 для передачи. С этого момента соединение остается открытым; закрытие соединения требует повторной аутентификации последующих запросов. Это означает, что сервер и клиент должны поддерживать постоянные соединения через заголовок «Keep-Alive» в стиле HTTP 1.0 или HTTP 1.1 (в котором постоянные соединения используются по умолчанию). Соответствующие заголовки запроса выглядят следующим образом:

    GET /index.html HTTP/1.1
    Authorization: NTLM TlRMTVNTUAABAAAABzIAAAYABgArAAAACwALACAAAABXT1JLU1RBVElPTkRPTUFJTg==
    
  4. Сервер отвечает со статусом 401, содержащим сообщение типа 2 в заголовке WWW-Authenticate (опять же, в кодировке Base-64). Это показано ниже.

    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: NTLM TlRMTVNTUAACAAAADAAMADAAAAABAoEAASNFZ4mrze8AAAAAAAAAAGIAYgA8AAAARABPAE0AQQBJAE4AAgAMAEQATwBNAEEASQBOAAEADABTAEUAUgBWAEUAUgAEABQAZABvAG0AYQBpAG4ALgBjAG8AbQADACIAcwBlAHIAdgBlAHIALgBkAG8AbQBhAGkAbgAuAGMAbwBtAAAAAAA=
    
  5. Клиент отвечает на сообщение типа 2, повторно отправляя запрос с заголовком Authorization, содержащим закодированное Base-64 сообщение типа 3 :

    GET /index.html HTTP/1.1
    Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGoAAAAYABgAggAAAAwADABAAAAACAAIAEwAAAAWABYAVAAAAAAAAACaAAAAAQIAAEQATwBNAEEASQBOAHUAcwBlAHIAVwBPAFIASwBTAFQAQQBUAEkATwBOAMM3zVy9RPyXgqZnr21CfG3mfCDC0+d8ViWpjBwx6BhHRmspst9GgPOZWPuMITqcxg==
    
  6. Наконец, сервер проверяет ответы в клиентском сообщении типа 3 и разрешает доступ к ресурсу.

     HTTP/1.1 200 OK
    

Должно быть достаточно легко получить имя пользователя пользователя & ndash; он отправляется в виде обычного текста в сообщении типа 3. На самом деле подтверждение того, что они предоставили правильный пароль, - это совсем другое дело. Выполнение всего этого оставлено читателю в качестве упражнения.

0 голосов
/ 28 марта 2011

Если вы используете Ubuntu, выполните

sudo apt-get ntlmaps или загрузите файл ntlmaps-xx-xx.deb

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

Затем запустите ntlmaps в качестве вашего прокси. Ntlmaps будет аутентифицироваться, используя ваше имя пользователя и пароль. Вы пишете любую программу ntlmaps автоматически аутентифицирует вашу программу, используя данные вашей конфигурации. Однако есть несколько вещей, которые необходимо настроить после установки ntlmaps. Сначала дайте мне знать, если это то, что вы ищете?

0 голосов
/ 23 марта 2011

Вы можете использовать модуль NTLM в Apache или настроить скрипт под IIS для сбора информации о входе в систему и размещения ее на своем сайте node.js.

0 голосов
/ 14 марта 2011

Попробуйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...