注意:我设法取得了一些进展,请看我当前问题的编辑,谢谢。
我想在Windows上使用libcurl访问具有Kerberos/GSSAPI身份验证的网站。我首先尝试用MIT Kerberos解决这个问题,但我也需要使用SSPI进行NTLM身份验证(libcurl不支持使用这两种不同的实现)。因此,我希望使用Windows库在Kerberos中进行身份验证。我用SSPI和SPNEGO支持编译了libcurl。
现在,我的问题是,我需要用提供的凭据连接到任何提供的领域(可能是当前用户的领域,也可能是其他用户的领域)。据我所理解,我需要从secur32.dll/security.dll调用AcquireCredentialsHandle和InitializeSecurityContext来检索Kerberos票证。
但每次我试着让它起作用,我:
为了方便调试和测试,您知道有什么工具可以将条目添加到SSPI缓存中,例如来自MIT Kerberos库的kinit吗?我正在使用Windows 2003资源工具包工具,但是找不到任何这样的工具.
任何帮助都将不胜感激!
编辑
好吧,我找到了如何用libcurl做我想要的东西。最后,我假设我必须做一些工作与SSPI之前,但curl是正确的支持这一点。
curl将对kerberos领域进行身份验证,并在使用带有SSPI和SPNEGO标志的正确构建的curl版本时将其存储在LSA缓存中。
在使用curl.exe进行测试时,需要指定--协商参数以及用户名/密码。但是,当使用libcurl时,只需将CURLOPT_HTTPAUTH选项设置为包含CURLAUTH_GSSNEGOTIATE的任何东西(例如CURLAUTH_ANY)。在我的测试中,libcurl完成了预期的Kerberos握手。
然而,这是我的新问题,所有这些握手都是用当前记录的凭据进行的,比如user1@A.COM。由于A.COM和B.COM之间存在信任,而且我的用户可以访问,所以它可以工作。我宁愿使用提供的凭据(user2.B.COM)登录?
另外,我不太确定是否可以在LSA缓存中添加与当前日志记录不同的用户的条目??
如何通过模拟用户user2.B.COM,使libcurl能够访问与此用户关联的票证以验证到web服务器,来实现此工作?
发布于 2013-07-12 14:17:02
也许这会对将来的人有所帮助,所以这里是我上面列出的问题的解决方案。
我使用LogonUser和ImpersonateLoggedOnUser方法来模拟具有指定用户的线程。使用它,curl使用与线程的用户标识相关联的LSA缓存,并设法使用该标识访问web服务器。
在我的设置中,我得到以下Kerberos数据包:
然后,只要模拟是有效的,我就可以在B.COM上对web服务器执行任何请求。
https://stackoverflow.com/questions/17535295
复制相似问题