如何在Node.js中将NTLM凭据转换为Kerberos令牌

时间:2019-07-08 13:47:19

标签: node.js kerberos ntlm ntlm-authentication ntlmv2

我想使用充当某种代理的Node.js构建服务器。连接到我的服务器的客户端使用NTLMv2进行身份验证(没有机会更改此身份),但是我的服务器应连接到的上游服务器需要Kerberos令牌。

因此,我的问题非常简单:如何使用Node.js将NTLMv2提供的信息转换为Kerberos令牌?到目前为止,在npm上,我已经找到了用于NTLMv2身份验证的模块,但是我可能需要某种方式与Windows进行对话,以将用户的NTLMv2数据转换为该用户的令牌。

关于此的任何提示,如何解决此问题?

2 个答案:

答案 0 :(得分:1)

绝对不是! NTLM和Kerberos的运行方式完全不同。首先,我强烈建议您尽快删除NTLM。

如果可以访问C接口,则可以轻松解决问题。我还假设您在像CentOS或FreeBSD等类似Unix的操作系统上使用MIT Kerberos。

NTLM将为您提供下层登录名。您首先需要通过LDAP将NetBIOS域转换为DNS域(使用libopenldap),然后可以为客户端构造Kerberos主体或企业主体。然后在您的KDC中创建一个服务帐户,并为该目标服务启用协议转换和该帐户上的受限委派。现在,代表该用户主体请求一个TGT并为该用户请求一张服务票,这样就可以访问Kerberos后端。 这是一本不错的文章:https://k5wiki.kerberos.org/wiki/Projects/Services4User

如果您将HTTPd作为反向代理运行,它可能会用mod_auth_gssapi处理您所有的魔术。

在Windows上,使用安全性API和SSPI有点麻烦。 Windows可以免费进行主要转换。您将需要LsaLogonUserKERB_S4U_LOGON,模拟该句柄,然后要求SSPI获得信誉的句柄...

答案 1 :(得分:1)

如果您的KDC允许约束委派,则可以将中介服务器设置为允许模拟。这样,它可以通过一种机制(在您的情况下为NTLM)与客户端建立安全上下文,并通过另一种机制(Kerberos)代表客户端与后端服务器通信。 Google提供了“约束委派”和“协议过渡”的详细信息。希望这会有所帮助。