2010-10-21 64 views
2

我已經在我的dev網站上設置了一個基本的openID系統,使用cakePHP(http://code.42dh.com/openid/):http://dev.cyclistsroadmap.com/users/login(原諒調試輸出)。它適用於myopenID,但不適用於雅虎(flickr圖標)openID和CakePHP:myopenID的作品,雅虎沒有

它返回一個身份的網址,但堅持「OpenID驗證失敗:找不到OpenID信息在https://me.yahoo.com/a/ ....」,根本不工作谷歌。

它爲myopenID工作的事實使我相信我已經正確設置了事情。關於雅虎爲什麼失敗的原因的任何線索網址回來?

編輯:它似乎PHP可能無法做SSL,是否有可能導致雅虎失敗?

回答

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); 
} 
+0

這似乎已經爲Flickr工作(我認爲)將繼續嘗試。感謝您的解決方案!我希望這是一個適當的選擇,而不是黑客。我在一個相當便宜的服務器上,所以我很容易想象到SSL並不是真的爲我設置的。 – paullb 2010-10-27 16:11:37