当使用Node.js的作为客户端,有没有可能使用Windows集成身份验证连接到服务器(例如连接到IIS时)?
我给这家只转了结果,其中Node.js的搜索用作服务器。
当使用Node.js的作为客户端,有没有可能使用Windows集成身份验证连接到服务器(例如连接到IIS时)?
我给这家只转了结果,其中Node.js的搜索用作服务器。
更新:现在有实现Windows集成身份验证一些模块。 节点SSPI使用SSPI(Windows安全API)来处理事物的服务器端,但没有做客户端验证 。 有几个客户端实现 ,如HTTP-NTLM ,但它们不是真正整合,因为它们需要用户密码-他们不使用SSPI做透明的权威性。
“Windows集成身份验证”是什么被称为NTLM身份验证。 当您从IIS接收HTTP 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编码用于传输。 从这点出发,连接保持打开; 关闭连接需要后续请求重新进行身份验证。 这意味着,在服务器和客户端必须支持持久连接,经由任一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
含有碱-64编码报头类型3消息 :
GET /index.html HTTP/1.1 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGoAAAAYABgAggAAAAwADABAAAAACAAIAEwAAAAWABYAVAAAAAAAAACaAAAAAQIAAEQATwBNAEEASQBOAHUAcwBlAHIAVwBPAFIASwBTAFQAQQBUAEkATwBOAMM3zVy9RPyXgqZnr21CfG3mfCDC0+d8ViWpjBwx6BhHRmspst9GgPOZWPuMITqcxg==
最后,服务器验证客户端的类型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
NTLM
experimental project!
NTLM的身份验证
experimental!
护照NTLM
supports SMB protocol it's a passportJs strategy
我选择了Kerberos的护照协商,并表示,对于NTLM NTLM
对于客户端,有什么工作原理是利用节点的libcurl做REST / HTTP调用。
这里的示例代码:
var endpoint = urlString;
var url = require("url");
var endpointUrl = url.parse(endpoint);
var Curl = require( 'node-libcurl' ).Curl;
var curl = new Curl();
curl.setOpt( 'USERNAME', '' );
//curl.setOpt( 'VERBOSE', 1 );
curl.setOpt( 'URL', endpoint );
curl.setOpt( 'HTTPAUTH', Curl.auth.NEGOTIATE );
curl.setOpt( 'NOPROXY', endpointUrl.hostname );
curl.on( 'end', function( statusCode, body, headers ) {
if (statusCode === 200) {
console.log(body);
cb(null, { statusCode, body, headers } );
} else {
cb(new Error(), { statusCode, body, headers } );
}
this.close();
});
curl.on( 'error', curl.close.bind( curl ) );
curl.perform();