openID и CakePHP: myopenID работает, Yahoo не работает - PullRequest
2 голосов
/ 21 октября 2010

Я установил базовую систему openID с использованием cakePHP (http://code.42dh.com/openid/) на моем веб-сайте разработчика: http://dev.cyclistsroadmap.com/users/login (простите за отладочный вывод). Он отлично работает для myopenID, но не для Yahoo (значок flickr)

Возвращается с идентификатором URL, но настаивает на том, что «проверка OpenID не удалась: информация об OpenID не найдена на https://me.yahoo.com/a/...." и вообще не работает для Google.

Тот факт, что это работает для myopenID, заставляет меня поверить, что у меня все настроено правильно. Есть ли какие-либо подсказки относительно того, почему Yahoo не может найти URL-адрес?

РЕДАКТИРОВАТЬ: Похоже, что PHP может быть не в состоянии сделать SSL, возможно ли, что это является причиной сбоя Yahoo?

1 Ответ

4 голосов
/ 22 октября 2010

Я прошел этот же путь совсем недавно, мне понадобилось время, чтобы разобраться. Посмотрите в своем журнале ошибок 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. Самый простой способ исправить это - отключить проверку SSL в комплекте Yadis ParanoidHTTPFetcher:

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);
}
...