如何将NTLM凭据转换为Node.js中的Kerberos代币



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

那么,我的问题非常简单:如何使用node.js,将NTLMV2提供的信息转换为Kerberos代币?在NPM上,到目前为止,我已经找到了用于NTLMV2身份验证的模块,但是我可能需要与Windows交谈以将用户的NTLMV2数据转换为该用户的令牌。

>

有任何提示,如何解决此问题?

绝对不是!NTLM和Kerberos的运作完全不同。首先,我强烈建议您尽快摆脱NTLM。

,如果您可以访问C界面,则可以简单地解决问题。我还假设您在类似Unix的OS(例如Centos或FreeBSD等(上使用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则是免费的。您需要使用KERB_S4U_LOGONLsaLogonUser,模仿该手柄,然后要求SSPI获得信用句柄...

如果您的KDC允许委派有限,则可以设置InterMedaite服务器以允许模仿。这样,它可以通过一种机制(在您的情况下为ntlm(与客户端建立安全上下文,并用另一种机制(kerberos(代表客户端与后端服务器进行交谈。Google用于"约束委托"one_answers"协议过渡"以获取更多信息。希望这会有所帮助。

最新更新