我想知道是否有人知道一种无需托管在 ASP 站点上即可使用 Windows 身份验证的方法。这是一个可以访问 LDAP 的 Intranet,所以我想知道是否有办法强制客户端向我提供数据,就好像数据来自 ASP 站点一样。我只需要登录域和用户名,我就可以从那里运行。在 Ubuntu 上使用 Node.js。有人对此有经验吗?
Update:现在有实现 Windows 集成身份验证的模块 https://www.npmjs.com/package/node-sspi.
In your 401
响应,您需要提供WWW-Authenticate
标头的值为NTLM
,它通知浏览器它们需要发送 Windows 凭据。
response.writeHead(401, {
'WWW-Authenticate': 'NTLM',
});
然后您就可以享受实施 NTLM 身份验证的乐趣了。引用自本文档有关 NTLM 身份验证协议 http://davenport.sourceforge.net/ntlm.html#ntlmHttpAuthentication:
-
客户端向服务器请求受保护的资源:
GET /index.html HTTP/1.1
-
服务器响应一个401
status,表明客户端必须进行身份验证。NTLM
通过以下方式呈现为受支持的身份验证机制WWW-Authenticate
标头。通常,服务器此时关闭连接:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: NTLM
Connection: close
请注意,如果 NTLM 是第一个提供的机制,Internet Explorer 将仅选择它;这与 RFC 2616 不一致,RFC 2616 规定客户端必须选择支持的最强身份验证方案。
-
客户端重新提交请求Authorization
标题包含一个类型 1 消息 http://davenport.sourceforge.net/ntlm.html#theType1Message范围。类型 1 消息采用 Base-64 编码进行传输。从此时起,连接将保持打开状态;关闭连接需要重新验证后续请求。这意味着服务器和客户端必须通过 HTTP 1.0 样式的“Keep-Alive”标头或 HTTP 1.1(默认情况下使用持久连接)支持持久连接。相关请求头如下:
GET /index.html HTTP/1.1
Authorization: NTLM TlRMTVNTUAABAAAABzIAAAYABgArAAAACwALACAAAABXT1JLU1RBVElPTkRPTUFJTg==
-
服务器回复一个401
状态包含类型 2 消息 http://davenport.sourceforge.net/ntlm.html#theType2Message in the WWW-Authenticate
标头(同样是 Base-64 编码)。如下所示。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: NTLM TlRMTVNTUAACAAAADAAMADAAAAABAoEAASNFZ4mrze8AAAAAAAAAAGIAYgA8AAAARABPAE0AQQBJAE4AAgAMAEQATwBNAEEASQBOAAEADABTAEUAUgBWAEUAUgAEABQAZABvAG0AYQBpAG4ALgBjAG8AbQADACIAcwBlAHIAdgBlAHIALgBkAG8AbQBhAGkAbgAuAGMAbwBtAAAAAAA=
-
客户端通过重新提交请求来响应类型 2 消息Authorization
包含 Base-64 编码的标头类型 3 消息 http://davenport.sourceforge.net/ntlm.html#theType3Message:
GET /index.html HTTP/1.1
Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGoAAAAYABgAggAAAAwADABAAAAACAAIAEwAAAAWABYAVAAAAAAAAACaAAAAAQIAAEQATwBNAEEASQBOAHUAcwBlAHIAVwBPAFIASwBTAFQAQQBUAEkATwBOAMM3zVy9RPyXgqZnr21CfG3mfCDC0+d8ViWpjBwx6BhHRmspst9GgPOZWPuMITqcxg==
-
最后,服务器验证客户端类型 3 消息中的响应并允许访问资源。
HTTP/1.1 200 OK
获取用户的用户名应该很容易——它在 Type 3 消息中以纯文本形式发送。实际上验证他们是否提供了正确的密码完全是另一回事。实现所有这些都作为读者的练习。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)