Windows集成身份validation在node.js客户端

当使用node.js作为客户端时,是否可以使用Windows集成身份validation连接到服务器(例如连接到IIS时)?

我的search只有node.js被用作服务器的结果。

更新:现在有一些实现Windows集成身份验证的模块。 node-sspi使用SSPI(Windows安全API)来处理事物的服务器端,但不执行客户端认证 。 有几种客户端实现,例如http-ntlm ,但由于它们需要用户密码,因此它们并不真正集成 – 它们不使用SSPI进行透明认证。


“Windows集成身份验证”就是所谓的NTLM身份验证。 当您从IIS收到一个包含NTLMWWW-Authenticate标头的HTTP 401时,您现在就有了实现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 

你必须弄清楚你将如何回复类型2消息的挑战 ,用户的密码是MD4哈希,并用于创建DES密钥来加密质询数据。

我不确定如何访问登录用户的凭证数据,这将允许您完成此操作,尽管我确信它将涉及编写本地C ++插件,以便您可以与必要的Windows API交谈。 或者,我想你可以问问用户的密码。

或者,您可以通过为您处理NTLM混乱的软件代理您的节点请求 。

对于Kerberos:

  • 节点SSPI

     Just on windows No client side node Supports NTLM too 
  • 护照协商

     Needs python on the server it's a passportJs strategy 

对于NTLM

  • 节点SSPI

     Just on windows No client side node Supports Kerberos too 
  • httpntlm
  • EXPRESS-NTLM
  • 请求NTLM
  • NTLM

     experimental project! 
  • NTLM的身份验证

      experimental! 
  • 护照NTLM

      supports SMB protocol it's a passportJs strategy 

我选择了Kerberos的passport-negotiate和NTLM的express-ntlm