Создание провайдера OpenID в PHP - PullRequest
12 голосов
/ 09 июля 2010

У меня есть веб-сайт, который я хочу превратить в провайдера OpenID.Все мои учетные записи пользователей хранятся в таблице mysql.

Я рассчитывал, так как OpenID представлен в виде URL, я собираюсь сделать что-то вроде: http://login.mydomain.com/username

Я настроилсубдомен, и создал htaccess, который перенаправляет все URL-адреса в /login.php?username=[username]

Как я вижу, и скажите мне, если я не прав, кто-то идет, скажем, StackOverflowвведите http://login.mydomain.com/myUsername. Они попадают на страницу на моем сервере, которая запрашивает их пароль (так как я уже знаю их имя пользователя), я проверяю, соответствует ли он, и возвращаю ключ?

Люди онлайн рекомендуют использоватьZend_OpenId_Provider.Я читал их документацию (http://framework.zend.com/manual/en/zend.openid.provider.html),, но я нахожу это очень запутанным. У них нет примера из реальной жизни, где логин / пароль пользователя хранятся в базе данных.

Я также виделphp-open-id (http://github.com/openid/php-openid),, но там тоже ничего не поделаешь.

Кажется, это довольно распространенная вещь. Есть ли там учебник или пример, который я легко адаптирую?

Ответы [ 6 ]

8 голосов
/ 23 июля 2010

Поскольку вы пометили этот вопрос с помощью Zend-Framework, я думаю, вы хотите реализовать это с помощью ZF.

Посмотрите на конструктор Zend_OpenId_Provider

public function __construct($loginUrl = null,
                            $trustUrl = null,
                            Zend_OpenId_Provider_User $user = null,
                            Zend_OpenId_Provider_Storage $storage = null,
                            $sessionTtl = 3600)

Важным является параметр $storage.

В примере на http://framework.zend.com/manual/en/zend.openid.provider.html они не передают никаких параметров. Это означает, что по умолчанию используется поставщик Zend_OpenId_Provider_Storage_File. Опять же, этот файл будет храниться по умолчанию в файлах в вашем каталоге TEMP (/tmp в Linux).

В основном пример должен быть полностью функциональным. Вы можете зарегистрировать еще нескольких пользователей, позвонив по номеру $server->register($someid, $somepassword);

Но так как он хранит учетные записи по умолчанию во временном каталоге, вам следует заменить эту строку чем-то вроде этого (если можно хранить учетные записи в файлах):

$dir = "/var/lib/myopenidusers";
mkdir($dir);
$server = new Zend_OpenId_Provider(null, null, null, new Zend_OpenId_Provider_Storage($dir) );

Теперь, если вы предпочитаете хранить своих пользователей в базе данных , вы должны реализовать свой собственный Provider_Storage.

Взгляните на абстрактный класс abstract class Zend_OpenId_Provider_Storage. Это методы, которые вы должны реализовать.

2 голосов
/ 30 июня 2012

Я перепробовал все перечисленное здесь, идентификатор сообщества, simpleid, janrain и т. Д., А также все те, которые утверждают, что являются поставщиками из OpenID Wiki / Libraries , и не удалось. Затем я наткнулся на Прерия и запустил его примерно через час. Немного больше работы по изменению запросов в index.php и login.php, и я заставил их работать с моей таблицей пользователей.

1 голос
/ 24 июля 2010

Вы можете попробовать JanRain Engage (http://www.janrain.com/products/engage). Это упрощенный интерфейс для интеграции OpenID с веб-приложениями. Бесплатная версия должна подойти для всех практических целей.

1 голос
/ 23 июля 2010

Вы можете попробовать phpMyId . См. Демоверсию http://phpmyid.com/. Подробную информацию о phpMyId можно найти по адресу http://siege.org/phpmyid.php.

0 голосов
/ 29 февраля 2012

SimpleID - небольшая и удобная в использовании + настройка программного обеспечения поставщика OpenID.Я пользуюсь им сам и не могу пожаловаться.

0 голосов
/ 26 июля 2010

Мы используем: http://source.keyboard -monkeys.org / projects / show / communityid

С их сайта:

"Community-ID - это реализация OpenID в PHP, совместимая с OpenID 2.0. Community-ID на 100% построен на программном обеспечении с открытым исходным кодом и выпускается под лицензией BSD. Пользователи могут отслеживать свои доверенные сайты и управлять ими . Вход в C-ID может быть именем пользователя / паролем или одноразовым паролем с Yubikey. У пользователя может быть несколько профилей, например, с личной или деловой контактной информацией.

Для администраторов Community-ID доступна статистика, позволяющая отслеживать регистрацию новых пользователей, авторизованных пользователей в день или количество доверенных сайтов. Администраторы могут перевести сайт в режим обслуживания или отправить электронные письма всем зарегистрированным пользователям.

Для пользовательских данных и аутентификации администратор может выбрать хранилище БД по умолчанию или подключиться к серверу LDAP. Текущий подтвержденный поддерживается OpenLDAP. Другие серверы LDAP также должны работать нормально. "

...