我正在使用最新的Janrain openid库示例,发现过程似乎与Yahoo,myopenid.com和其他人一起工作......
但我坚持使用Google端点( https 分号 // www.google.com/accounts/o8/id )。在重定向到谷歌页面之前,Consumer.php只返回406 apache错误。
我的所有安装都在这里: http://www.coplango.com/vendor/openid/examples/
我认为归结为php-yadis指定Accept: application/xrds+xml
标题,但我检查了代码,其他类型也被接受为text/html
和application/xhtml+xml
。
有人来过这个吗?
有任何线索吗?
非常感谢!
答案 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
也可能需要TRUE
或FALSE
。
另请参阅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