【问题标题】:openID and CakePHP : myopenID works, yahoo does notopenID 和 CakePHP:myopenID 有效,雅虎无效
【发布时间】:2011-04-28 15:37:39
【问题描述】:

我在我的开发网站上使用 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 失败的原因吗?

【问题讨论】:

    标签: cakephp openid


    【解决方案1】:

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

    【讨论】:

    • 这似乎对 Flickr 有效(我认为)将继续尝试。感谢您的解决方案!我希望这是一个正确的选择,而不是一个黑客。我在一个非常便宜的服务器上,所以我可以很容易地想象 SSL 并没有真正为我设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    相关资源
    最近更新 更多