PHP-OpenID Жанрена и Google / Yahoo

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

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

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


person Dan G.    schedule 14.06.2009    source источник
comment
Имея точную проблему здесь. Я нахожусь в Windows, включение curl не помогает :(   -  person Shawn    schedule 27.08.2009
comment
Та же проблема ... Все работало нормально, пока я не обновился до Snow Leopard. На другом моем компьютере с Ubuntu и на производственном сервере он все еще работает.   -  person miguelSantirso    schedule 12.09.2009
comment
Просто примечание: НЕНАВИЖУ OPENID и то, как плохо он реализован / документирован. Я весь день пытался заставить работать библиотеку janrain и думал, что делаю что-то не так с Google и Yahoo. Однако lightopenid (openid.net/developers/libraries#php) работал с Google и Yahoo, но не другие.   -  person Andres    schedule 15.08.2010


Ответы (8)


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

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

person miguelSantirso    schedule 05.10.2009

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

extension=php_curl.dll

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

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

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 :: supportsSSL должен возвращать true).

person Andrei Bica    schedule 07.04.2010

У меня была точно такая же проблема, и мне потребовалось почти 2 часа, чтобы отследить проблему. Библиотека OpenId Яна Рейна требует «DOM или domxml PHP XML» (https://github.com/openid/php-openid), но при отсутствии ни того, ни другого она автоматически завершится ошибкой!

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

yum install php-xml

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

person tnajdek    schedule 06.01.2011

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

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

person user127513    schedule 23.06.2009

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

person FryGuy    schedule 30.06.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, что имеет смысл.

person pixeline    schedule 28.09.2009

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

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

person keturn    schedule 22.06.2009
comment
Ошибка, которую я получаю, заключается в том, что функция begin () в Consumer.php ничего не возвращает. Строка: $ auth_request = $ consumer- ›begin ($ openid); оставляет $ auth_request NULL, когда я пытаюсь использовать Google или Yahoo. У меня нет проблем с Yahoo, когда я использую Flickr, поскольку он все еще использует старый способ обнаружения - это заставляет меня думать, что моя установка SSL не является проблемой. - person Dan G.; 23.06.2009

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

Мой простой тест, просто чтобы убедиться, что библиотека связывается с Google, заключался в использовании программы examples / discover.php и передаче URL-адреса OpenID в Google (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 / discover.php обнаруживать услуги, предлагаемые URL-адресом Google.

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

person Reuben    schedule 12.08.2011