【发布时间】:2015-10-01 10:35:53
【问题描述】:
我正在编写一个从命令行运行并访问使用 Oauth2 的服务的 Web 服务客户端。
我似乎正确地获取了 Oauth 令牌,并且对 web 服务的第一个请求识别了该令牌。但是响应是 303 重定向(我设置了 CURLOPT_FOLLOWLOCATION => true)但是后续页面说我没有提供身份验证令牌。
目前我通过为 curl 句柄设置标题来传递 oauth 令牌:
"Authorization: OAuth2 $oauth"
我怀疑标头未包含在后续请求中。
我尝试设置CURLOPT_UNRESTRICTED_AUTH => true,但无济于事(但根据手册,它会在重定向中保留用户名和密码 - 而不是身份验证标头)。
网络服务允许在身份验证标头或 URL 中发送 oauth 令牌(但不能作为 cookie)。在 URL 中设置令牌会返回相同的重定向(即在 URL 中没有令牌),因此我不能将此方法与 CURLOPT_FOLLOWLOCATION 一起使用。
(该服务不允许在 cookie 中发送 oauth 令牌,PHP 版本为 5.6)
【问题讨论】:
-
您正在向 SSL 主机请求?
-
是的(这使得很难看到代码实际在做什么)
-
你添加了吗:curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($conn, CURLOPT_SSL_VERIFYHOST, FALSE);卷曲选项?
-
这是基于我的客户无法验证主机证书的想法(它不能并且我已经有了这些选项)。虽然我很欣赏你在这里的意图,但你需要一些时间来猜测我目前用来获取誓言令牌的 200 行左右的代码 - 这太多了,无法在此处发布。我创建了一个测试平台,并在代码中的其他地方发现了一个错误,该错误正在重置标头 - 由于过度热心的缓存代理没有正确处理“Vary”标头,这最初并不明显。
-
嗨,添加 curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);并打印 curl_exec 的输出以查看您的 cURL 请求的结果?