cakephp - openID 和 CakePHP : myopenID works, yahoo 没有

标签 cakephp openid

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

它返回一个身份 URL,但坚持“OpenID 验证失败:在 https://me.yahoo.com/a/ .... 处找不到 OpenID 信息”,并且对 google 根本不起作用。

它适用于 myopenID 的事实使我相信我的设置正确。尽管 URL 已返回,但雅虎为何仍会失败,有任何线索吗?

编辑:看来 PHP 可能无法执行 SSL,这是否可能是导致 Yahoo 失败的原因?

最佳答案

我最近也走上了同样的道路,花了我一段时间才弄清楚。查看 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);
}

关于cakephp - openID 和 CakePHP : myopenID works, yahoo 没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3988363/

相关文章:

openid - OpenID 提供商向消费者提供哪些个人信息?

php - CakePHP 的授权超时问题

cakephp - 如何定义 "global"在 CakePHP 中查找模型的条件?

caching - 如何在 CakePHP 中的模型函数内使用助手

openid - 在您的网站上仅使用 OpenId 进行登录是否有助于阻止垃圾邮件机器人?

c# - OpenID+OAuth 中缺少 DotNetOpenAuth.ApplicationBlock

oauth - AOL openid网站验证

php - Cakephp:插入tinyint字段时。仅获取 "0"或 "1"

php - 在 TinyMCE 中使用新的 iframe 嵌入代码嵌入 YouTube 视频

PayPal OpenId 与 MVC 连接