Создание поставщика OpenID в PHP
У меня есть существующий веб-сайт, который я хочу превратить в поставщика 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), но не помогайте и там.
Кажется, это довольно обычная вещь. Есть ли учебник или пример, который я могу легко адаптировать?
Ответы
Ответ 1
Как вы отметили этот вопрос в 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
Я попробовал все перечисленные здесь, идентификатор сообщества, simpleid, janrain и т.д., а также все те, кто утверждает, что являются поставщиками из OpenID Wiki/Libraries и не удалось. Затем я наткнулся на Prairie и начал работать примерно через час. Немного больше работы по изменению запросов в index.php и login.php, и я пытался заставить его работать против моей таблицы пользователей.
Ответ 3
Вы можете попробовать phpMyId. См. Демонстрацию от http://phpmyid.com/. Все подробности о phpMyId можно найти на http://siege.org/phpmyid.php.
Ответ 4
Вы можете попробовать JanRain Engage (http://www.janrain.com/products/engage). Это упрощенный интерфейс для интеграции OpenID с веб-приложениями. Бесплатная версия должна быть достаточно хорошей для всех практических целей.
Ответ 5
Мы используем: http://source.keyboard-monkeys.org/projects/show/communityid
На своем веб-сайте:
"Идентификатор сообщества - это реализация OpenID на PHP, совместимая с OpenID 2.0. Идентификатор сообщества строится на 100% на ПО с открытым исходным кодом и выпускается под лицензией BSD. Пользователи могут отслеживать свои надежные сайты и управлять ими Вход в C-ID может быть именем пользователя /passowrd или одноразовым паролем с Yubikey. Пользователь может иметь несколько профилей, например, с приватной или деловой контактной информацией.
Для статистики администраторов идентификаторов сообщества доступны отслеживать регистрацию новых пользователей, авторизованных пользователей в день или количество доверенных сайтов. Администраторы могут установить сайт в режиме обслуживания или отправить электронные письма всем зарегистрированным пользователям.
Для пользовательских данных и аутентификации администратор может выбрать хранилище db по умолчанию или подключиться к LDAP-серверу. Подтвержденным подтверждением является OpenLDAP. Другие LDAP-серверы должны работать и отлично ".
Ответ 6
SimpleID - это небольшое и приятное приложение + программное обеспечение провайдера OpenID. Я использую его сам и не могу жаловаться.