将JanRain OpenID Library与Google配合使用时出现“无法接受”406错误

时间:2009-09-30 10:23:45

标签: php apache openid janrain

我正在使用最新的Janrain openid库示例,发现过程似乎与Yahoo,myopenid.com和其他人一起工作......

但我坚持使用Google端点( https 分号 // www.google.com/accounts/o8/id )。在重定向到谷歌页面之前,Consumer.php只返回406 apache错误。

我的所有安装都在这里: http://www.coplango.com/vendor/openid/examples/

  • 点击使用者尝试使用消费者示例,但是discovery.php以同样的方式失败,证明它在发现期间发生...
  • 您还可以检查detect.php以检查我的安装 - HTTP获取测试失败,因为它尝试访问返回503的地址。其余很好。

我认为归结为php-yadis指定Accept: application/xrds+xml标题,但我检查了代码,其他类型也被接受为text/htmlapplication/xhtml+xml

有人来过这个吗?

有任何线索吗?

非常感谢!

3 个答案:

答案 0 :(得分:2)

确定,

我进一步调查过,似乎是我的提供者,如果包含死亡单词“/ id”的任何字符串作为GET参数传递,则返回406错误。花了我几天的时间才弄清楚它是不是打开了!

有关我正在使用PlanetHoster的信息,如果有其他人遇到这个问题。我已经给他们发了一张票请求,等着他们回答。

答案 1 :(得分:1)

在我的机器上运行消费者示例,我收到以下错误:

Got no response code when fetching https://www.google.com/accounts/o8/id
CURL error (60): SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

这意味着curl无法验证谷歌的https服务器证书。您可以通过提供带有CA证书的curl来通过CURLOPT_CAINFO / CURLOPT_CAPATH验证Google的证书,或者 - 更容易 - 通过CURLOPT_SSL_VERIFYPEER停止验证证书来解决此问题。 Auth/Yadis/ParanoidHTTPFetcher.php中的以下更改为我完成了后者:

--- ParanoidHTTPFetcher.php.orig        2009-04-22 02:31:20.000000000 +0800
+++ ParanoidHTTPFetcher.php     2009-09-30 22:35:24.093750000 +0800
@@ -127,6 +127,9 @@
                         Auth_OpenID_USER_AGENT.' '.$curl_user_agent);
             curl_setopt($c, CURLOPT_TIMEOUT, $off);
             curl_setopt($c, CURLOPT_URL, $url);
+
+            // don't verify server cert
+            curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);

             curl_exec($c);

当然,你的curl安装也必须支持ssl - 检查你的phpinfo()。另外,如果CURLOPT_SSL_VERIFYPEER被停用,CURLOPT_SSL_VERIFYHOST也可能需要TRUEFALSE

另请参阅http://www.openrest.eu/docs/openid-not-completely-enabled-for-google.php(通过 相关 Why doesn't Google OpenID provider work with PHP-OpenId on my server?)。

答案 2 :(得分:0)

解决方案:

在.htaccess文件中输入

SecFilterEngine Off