openID和CakePHP:myopenID有效,雅虎没有

时间:2010-10-21 14:11:14

标签: cakephp openid

我在我的开发网站上使用cakePHP(http://code.42dh.com/openid/)设置了一个基本的openID系统:http://dev.cyclistsroadmap.com/users/login(原谅调试输出)。它适用于myopenID,但不适用于yahoo(flickr图标)

它返回一个标识网址,但坚持“OpenID验证失败:在https://me.yahoo.com/a/找不到OpenID信息....”并且根本不适用于谷歌。

它适用于myopenID的事实让我相信我已经正确设置了东西。关于为什么雅虎失败的原因,任何线索都要回归?

编辑:似乎PHP可能无法执行SSL,是否可能导致Yahoo失败?

1 个答案:

答案 0 :(得分:4)

我最近一直走在这条完全相同的道路上,花了一段时间才弄明白。看看你的PHP错误日志,对我来说是MAMP/logs/php_error.log。你可能会发现以下几点:

Got no response code when fetching https://www.google.com/accounts/o8/ud  
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

这可能是本地PHP / OpenSSL安装中的问题。解决此问题的最简单方法是在捆绑的Yadis ParanoidHTTPFetcher中禁用SSL验证:

Index: /app/vendors/Auth/Yadis/ParanoidHTTPFetcher.php
===================================================================
--- a/app/vendors/Auth/Yadis/ParanoidHTTPFetcher.php
+++ b/app/vendors/Auth/Yadis/ParanoidHTTPFetcher.php
@@ -131,7 +131,9 @@
             if (defined('Auth_OpenID_VERIFY_HOST')) {
                 curl_setopt($c, CURLOPT_SSL_VERIFYPEER, true);
                 curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
+            } else {
+                curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
             }
             curl_exec($c);

             $code = curl_getinfo($c, CURLINFO_HTTP_CODE);
@@ -204,6 +206,8 @@
         if (defined('Auth_OpenID_VERIFY_HOST')) {
             curl_setopt($c, CURLOPT_SSL_VERIFYPEER, true);
             curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
+        } else {
+            curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
         }

         curl_exec($c);

要在生产系统上启用 SSL主机验证,请在core.php中添加以下内容:

if (!Configure::read('debug')) {
    define('Auth_OpenID_VERIFY_HOST', true);
}