我想使用Node.js构建一个服务器,它充当某种代理。连接到我的服务器的客户机使用NTLMv2进行身份验证(没有机会改变这一点),但是我的服务器要连接到的上游服务器需要一个Kerberos令牌。
因此,我的问题非常简单:如何使用Node.js将NTLMv2提供的信息转换为Kerberos令牌?在npm上,到目前为止,我已经找到了用于NTLMv2身份验证的模块,但不知何故,我可能需要与Windows对话,以便将用户的NTLMv2数据转换为该用户的令牌。
对此有什么提示,如何处理这个问题?
发布于 2019-07-09 03:47:33
绝对不是!NTLM和Kerberos的操作完全不同。首先,我强烈建议尽快摆脱NTLM。
如果你能访问C接口,你可以以一种简单的方式解决你的问题。我还假设您在类Unix操作系统(如CentOS或FreeBSD等)上运行MIT Kerberos。
NTLM将为您提供下层登录名。首先需要通过LDAP域将Kerberos域转换为DNS域(使用libopenldap
),然后才能为客户端构建NetBIOS主体或企业主体。然后在您的KDC中创建一个服务帐户,并在该帐户上为目标服务启用协议转换和约束委托。现在,代表该用户主体请求一个TGT,并为该用户请求一个服务票证,这样您就可以访问Kerberos后端了。这里有一个不错的读物:https://k5wiki.kerberos.org/wiki/Projects/Services4User
如果您将HTTPd作为您的反向代理运行,它可能会为您的mod_auth_gssapi
处理所有的魔力。
在Windows上,这对于安全API和SSPI来说有点麻烦。而主要的转换在Windows中是免费的。您将需要具有KERB_S4U_LOGON
的LsaLogonUser
,使用该句柄进行模拟,然后需要SSPI来获取证书句柄……
发布于 2019-07-18 14:36:49
如果您的KDC允许受约束的委派,则可以将intermedaite服务器设置为允许模拟。这样,它可以在一种机制(在您的示例中为NTLM)中与客户端建立安全上下文,并在另一种机制(Kerberos)中代表客户端与后端服务器通信。谷歌搜索“受限委托”和“协议转换”以获取更多信息。希望这能有所帮助。
https://stackoverflow.com/questions/56936336
复制相似问题