【发布时间】:2013-05-28 21:16:16
【问题描述】:
有人对 libcurl (C/C++) 和 Kerberos 身份验证有任何经验吗?
我能够设置所有内容并发布数据 - 但是,现在我们已打开 SSO(通过 JBoss 服务器上的 SPNEGO)我无法正确进行身份验证,授权被降级为基本。
在这个阶段,我正在使用 curl_easy_setopt(curl,CURLOPT_HTTPAUTH, CURLAUTH_GSSNEGOTIATE) 并且还将 CURLOPT_KRBLEVEL 设置为“私有”。
查看wireshark 中的标头,来自curl 的响应没有提供任何凭据——这会在JBoss 服务器上引发EncryptionKey 异常。我可以使用缓存的凭据和 httprequest 对象通过 .NET 在服务器上进行身份验证。唯一的问题是我们不能在这个项目上使用 .NET。
提前感谢您的帮助。
- 作为补充。我刚刚看到在 libcurl 下 Kerberos 只支持 ftp。我正在搜寻消息来源以尝试确认是否是这种情况。有人知道我们可以用来执行 POST 的任何其他库吗?
【问题讨论】:
-
我已经做到了。尝试首先使用带有
-v --negotiate的curl可执行文件并报告它所说的内容。它确实支持 Kerberos for HTTP 很好,我熟悉源代码,如果需要可以演示它。 -
嗨,n.m - 好吧,我使用的 curl 版本似乎不支持 --negotiate.. 这可以解释很多。我现在要回到 curl 站点,尝试获取副本并使用我需要的内容进行重建。 (具有讽刺意味的是,这是我第二次这样做了..)
-
不..那里没有运气。我可以在构建日志中看到它包括 krb4.h 等。我为我的 kerberos 安装设置了路径。我一直在使用 vs2010 或 nmake 构建 - 但没有成功。据我所知,我已经修改了相关的配置/制作文件,但显然我遗漏了一些东西。一旦我有一个可以工作的内置版本,我就会告诉你。 G
-
好的 - 设置并准备就绪。只是玩不同的选择,看看我能不能让它继续下去。我在 haxx.se 上看到 Daniel 提到了有关输入无效用户名以触发协商的内容。无论如何,任何有关订购和包含选项的提示都会很棒。谢谢 G
-
Daniel 是对的,这是 curl 可执行文件的错误/缺陷。我忘记了。
curl必须提供-u someuser以进行 任何 类型的身份验证。使用 Kerberoscurl从不同的地方获取用户名,但它仍然需要命令行选项。你可以在那里放任何你想要的用户名。所以说curl -v -u x --negotiate yoursite看看会发生什么。顺便说一句,我对 Windows 方面不是很熟悉。您可能需要也可能不需要在那里执行kinit命令,以便curl进行协商。