没有.NET的Windows身份validation头。 可能?

我想知道是否有人知道的方式来使用Windows身份validation,而无需托pipe在ASP网站上。 这是一个内部网访问LDAP,所以我想知道是否有办法强制客户端提供数据,就好像它来自ASP网站。 我只需要login域和用户名,我可以从那里运行。 在Ubuntu上使用Node.js。 有人对此有经验吗?

Solutions Collecting From Web of "没有.NET的Windows身份validation头。 可能?"

更新:现在有一个实现Windows集成身份验证的模块 。


在您的401响应中,您需要提供一个值为NTLMWWW-Authenticate标头,通知浏览器他们需要发送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不符,RFC 2616指出客户端必须选择支持最强的认证方案。

  3. 客户端重新提交包含Type 1消息参数的Authorization标头的请求。 类型1消息是Base-64编码传输。 从这一点来看,这个连接是敞开的。 关闭连接需要重新认证后续的请求。 这意味着服务器和客户端必须通过HTTP 1.0样式的“Keep-Alive”头或HTTP 1.1(默认情况下使用持久连接)支持持久连接。 相关的请求标题如下所示:

     GET /index.html HTTP/1.1 Authorization: NTLM TlRMTVNTUAABAAAABzIAAAYABgArAAAACwALACAAAABXT1JLU1RBVElPTkRPTUFJTg== 
  4. 服务器在WWW-Authenticate报头(同样是Base-64编码)中回复一个包含Type 2消息的401状态。 如下所示。

     HTTP/1.1 401 Unauthorized WWW-Authenticate: NTLM TlRMTVNTUAACAAAADAAMADAAAAABAoEAASNFZ4mrze8AAAAAAAAAAGIAYgA8AAAARABPAE0AQQBJAE4AAgAMAEQATwBNAEEASQBOAAEADABTAEUAUgBWAEUAUgAEABQAZABvAG0AYQBpAG4ALgBjAG8AbQADACIAcwBlAHIAdgBlAHIALgBkAG8AbQBhAGkAbgAuAGMAbwBtAAAAAAA= 
  5. 客户端通过使用包含Base-64编码类型3消息的Authorization标头重新提交请求来响应类型2 消息 :

     GET /index.html HTTP/1.1 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGoAAAAYABgAggAAAAwADABAAAAACAAIAEwAAAAWABYAVAAAAAAAAACaAAAAAQIAAEQATwBNAEEASQBOAHUAcwBlAHIAVwBPAFIASwBTAFQAQQBUAEkATwBOAMM3zVy9RPyXgqZnr21CfG3mfCDC0+d8ViWpjBwx6BhHRmspst9GgPOZWPuMITqcxg== 
  6. 最后,服务器验证客户端类型3消息中的响应,并允许访问资源。

      HTTP/1.1 200 OK 

获取用户的用户名应该很简单 – 它在Type 3消息中以纯文本格式发送。 其实验证他们提供了正确的密码完全是另一回事。 所有这些都是读者的一个练习。

试试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 

您可以在Apache中使用NTLM模块,也可以在IIS下设置脚本来捕获登录信息并将其发布到您的node.js站点。

如果您使用的是Ubuntu,请执行

sudo apt-get ntlmaps或下载'ntlmaps-xx-xx.deb'

并配置你的代理,它会问你的域名,用户名和密码。

然后运行ntlmaps作为你的代理。 Ntlmaps将使用您的用户名和密码进行身份验证。 您可以编写任何程序ntlmaps将使用您提供的配置详细信息自动验证您的程序。 但是在安装ntlmaps之后,您还需要配置几件事情。 首先让我知道这是你正在寻找的东西?