PHP-OpenID Джанрейна и Google / Yahoo - PullRequest
10 голосов
/ 14 июня 2009

Я использую PHP-OpenID Janrain 2.1.3 , и мне удалось заставить его работать со всеми провайдерами, которых я пробовал, за исключением Google и Yahoo. Основное отличие здесь, по-видимому, заключается в том, что Google и Yahoo, в отличие от большинства других провайдеров, не используют URL-адрес, специфичный для пользователя, а вместо этого имеют полностью готовую среду обнаружения пользователей, которая создает стандартную среду Janrain для цикла, а затем пытается начать запрос аутентификации.

Из того, что я видел, похоже, что это, вероятно, открытие YADIS, которое выдает ошибку, которую можно обойти, так как открытие находится на конце Google или Yahoo, но я не уверен. Для меня это большой неформальный опыт обучения, и мне не повезло найти документацию, которая может помочь мне в этом. Любые советы будут с благодарностью.

Редактировать: конкретная проблема, с которой я сталкиваюсь, заключается в том, что при вызове функции begin () для URL Google или Yahoo я получаю нулевое возвращение. Эта функция находится в Auth / OpenID / Consumer.php для справки.

Ответы [ 11 ]

10 голосов
/ 05 октября 2009

Хорошо, я наконец-то исправил библиотеку ... Я все объяснил здесь (вы также можете скачать библиотеку php-openid после моих изменений).

Мне нужно было сделать то, что предложил Пол Тарджан, но мне также нужно было изменить Auth_OpenID_detectMathLibrary и добавить ключевое слово static для многих функций. После этого, кажется, работает отлично, хотя это не идеальное решение ... Я думаю, что кто-то должен переписать всю библиотеку в PHP 5 ...

6 голосов
/ 08 апреля 2010

У меня была такая же проблема на Windows XP. Исправлено активацией расширения скручивания. Для этого раскомментируйте в php.ini строку

extension=php_curl.dll

, удалив ; перед ним, если таковые имеются. Перезапустите apache.

Также для правильной работы окон необходимо определить Auth_OpenID_RAND_SOURCE как ноль, поскольку в окнах нет случайного источника. Вы можете сделать это, добавив строку

define('Auth_OpenID_RAND_SOURCE', null);

в CryptUtil.php перед первой строкой кода

if(!defined('Auth_OpenID_RAND_SOURCE')){

Даже если скручивание не включено, API должен работать, используя вместо этого Auth_Yadis_PlainHTTPFetcher для связи через HTTP. В случае Google и Yahoo вам нужен https, поэтому он работает, только если open_ssl включен (Auth_Yadis_PlainHTTPFetcher :: supportSSL должен вернуть true).

2 голосов
/ 07 января 2011

У меня была точно такая же проблема, и мне потребовалось почти 2 часа, чтобы отследить проблему. Для библиотеки Open Rain от Jan Rain требуется 'DOM или domxml PHP XML' (https://github.com/openid/php-openid), но она не будет работать автоматически, когда ни один из них недоступен!

На моей установке CentOS просто:

yum install php-xml

исправил проблему (я использую этот репозиторий: http://blog.famillecollet.com/pages/Config-en).

1 голос
/ 01 июля 2009

Это потому, что у вас не включена поддержка curl в php. Без этого он не может получить https контент. По крайней мере, это то, что я обнаружил. Когда я попытался получить Yahoo или Google, это не удалось с сообщением об ошибке «Ошибка аутентификации; не действительный OpenID», но когда я включил php_curl, он работает правильно.

1 голос
/ 28 сентября 2009

Убедитесь, что на вашем сервере есть curl с включенным протоколом https. Это решило это для меня.

см. тему .

Вот быстрый скрипт, чтобы проверить это. Загрузите файл на свой сервер, затем перейдите к нему через браузер.

<?php
error_reporting(E_ALL);
// create curl resource
$myurl = 'https://<YOURACCOUNT>.myopenid.com';
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL, $myurl);
curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
$buffer = curl_exec($curl_handle);


if (empty($buffer))
{
    print "Sorry, cannot access $myurl .<p>". curl_error($curl_handle);
}
else
{
    print $buffer;
}

curl_close($curl_handle);


?>

Если он возвращает «Протокол https не поддерживается или отключен в libcurl», то вы знаете, что делать.

Я попробовал использовать учетную запись gmail, и она работает, но это приводит к перенаправлению 301, что имеет смысл.

1 голос
/ 01 июля 2009

Я согласен с частью сертификата - для меня установка пакета ca-Certificates (в системах, подобных debian: apt-get install ca-сертификаты) и перезапуск веб-сервера решили проблему с Google / Yahoo. Не моя идея, но вместо этого предложено для stackoverflow : -)

1 голос
/ 23 июня 2009

Вы используете пример RP? Могу ли я предложить вам отправить подробную ошибку на http://trac.openidenabled.com/trac/newticket?project=php-openid или подробный запрос через список рассылки.

Поддержка немедленного режима действительно работает с библиотеками, если реализована правильно. Я (и другие) также был бы рад помочь вам на IRID канале OpenID irc.reenode.net в #openid. Мой ник вялый.

1 голос
/ 15 июня 2009

Эта библиотека должна прекрасно работать с Yahoo и Google. Вы можете посмотреть онлайн-демонстрацию для этой библиотеки и попробовать ее самостоятельно, используя "yahoo.com" или "https://www.google.com/accounts/o8/id", чтобы проверить ее на этих двух OP.

У Google есть идентификатор для ввода, потому что они все еще в бета-версии и еще не выдвинули свой OP-идентификатор просто google.com.

0 голосов
/ 12 августа 2011

На пару лет позже, но это может быть актуально для пользователей, использующих Janrains PHP OpenID 2.2.2 на платформе Windows. Я все еще на PHP 5.2.17.

Мой простой тест, просто чтобы убедиться, что библиотека связывается с Google, должен был использовать программу examples / Discover.php и передать URL-адрес Googles OpenID (https://www.google.com/accounts/o8/id).

Согласно инструкциям, стандартными шагами являются включение GMP (uncomment extension = php_gmp.dll) и CURL (uncomment extension = php_curl.dll). XML уже должен быть включен.

Вам также может понадобиться извлечь пакет из contrib / google и убедиться, что google_discovery.php и ca-bundle.crt находятся в Auth / OpenID.

Дополнительный параноик может начинаться с examples / detect.php, чтобы убедиться, что они настроены правильно. Ожидается, что вы пройдете все тесты, кроме теста на криптографическую случайность. Для этого вам нужно будет добавить

define('Auth_OpenID_RAND_SOURCE', null);

к началу примеров / detect.php. И пока вы там, добавьте это в examples / consumer / common.php (так как examples / Discover.php использует его).

Теперь, даже после всего этого, поиск по URL-адресу Google OpenID не удался. Я получаю 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.

В среде Windows вам нужно определение для CURLOPT_CAINFO. Для моего быстрого теста я добавил curl_setopt($c, CURLOPT_CAINFO, dirname(__FILE__)."/../OpenID/ca-bundle.crt"); перед операторами curl_exec () в Auth / Yadis / ParanoidHTTPFetcher.php.

Это позволило examples / learn.php обнаружить службы, предлагаемые URL-адресом Google.

В качестве более долгосрочного решения для настройки CURLOPT_CAINFO в Windows вы можете обратиться к этому ответу StackOverflow , чтобы вы могли добавить параметр в свой php.ini.

0 голосов
/ 22 июня 2009

Другое потенциальное различие заключается в том, что Google и Yahoo используют HTTPS, и если ваша установка PHP или SSL настроена неправильно (возможно, отсутствуют сертификаты CA), тогда ваш код OpenID не сможет установить связь или завершить вызов check_authentication.

Но без сообщений об ошибках или журналов я не могу точно сказать, на какой тип ошибки вы смотрите.

...