2009-06-14 225 views
10

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

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

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

+0

Я в той же лодке, что и вы. –

+1

Имея точную проблему здесь. Я нахожусь на окнах, позволяющих завивать не помогает :( – Shawn

+0

Такая же проблема ... Все работало нормально до тех пор, пока я не перешел на Snow Leopard. На моем другом компьютере ubuntu и на производственном сервере он все еще работает. – miguelSantirso

ответ

10

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

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

+1

Ты мой герой, сэр. –

1

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

У Google есть идентификатор для ввода, поскольку он все еще находится в стадии бета-тестирования и еще не подтолкнул их идентификатор OP как «google.com».

0

Я загрузил последние библиотеки, и я получаю те же неудачные результаты при использовании Yahoo !. Я не пробовал Google.

Если я пытаюсь использовать http://www.yahoo.com, я получаю сообщение об ошибке, когда авторизация не удалась, но возвращает мой правильный URL-адрес me.yahoo.com. Если я попытаюсь войти с помощью моего my.yahoo.com url, тогда я получаю сообщение об ошибке, чтобы ввести действительный URL OpenID.

+0

У меня больше нет этой проблемы .... Я не уверен, что я сделал иначе, кроме использования «$ openid = $ response-> getDisplayIdentifier()», чтобы получить URL-адрес для сохранения в базе данных.Я не вижу, как это могло бы устранить проблему с yahoo.com и google.com, которая не работает должным образом, но после того, как это изменило мой OpenID, все аутентифицирует все правильно. – MasterZ

0

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

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

+0

«Ошибка», Я получаю s что функция begin() в Consumer.php ничего не возвращает. Строка: $ auth_request = $ consumer-> begin ($ openid); оставляет $ auth_request NULL, когда я пытаюсь использовать Google или Yahoo. У меня нет проблем с Yahoo, когда я перехожу через Flickr, поскольку он по-прежнему использует старый способ обнаружения - это заставляет меня полагать, что моя установка SSL не проблема. –

1

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

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

1

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

1

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

+0

Это не проблема. У меня есть завиток включен и до сих пор не работает ... – miguelSantirso

1

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

см. Это thread.

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

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

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

6

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

extension=php_curl.dll 

удалением ; перед ним, если есть. Перезапустите apache.

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

define('Auth_OpenID_RAND_SOURCE', null); 

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

if(!defined('Auth_OpenID_RAND_SOURCE')){ 

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

2

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

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

yum install php-xml 

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

0

Пару лет слишком поздно, но это может быть актуально для пользователей, использующих библиотеку 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 = php_gmp.dll) и CURL (расширение uncomment = php_curl.dll). XML уже должен быть включен.

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

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

define('Auth_OpenID_RAND_SOURCE', null); 

наверху примеров/detect.php. И пока вы там, добавьте это к примерам/consumer/common.php (поскольку примеры/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.

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

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

Смежные вопросы