К сожалению, не все так просто. Я не знаю ни одной существующей библиотеки, поэтому вот несколько мыслей о том, что нужно сделать. Я собираюсь предположить, что вы хотите создать проект с открытым исходным кодом - если это не так, игнорируйте части, касающиеся других возможных пользователей вашего проекта.
Протоколы
И Google, и Yahoo являются поставщиками OpenID, поэтому вы легко можете получить три пункта из своего списка. Я рекомендую LightOpenID для этого. (дисклеймер: я написал LightOpenID)
Twitter и Facebook используют OAuth, поэтому вам нужно найти подходящую библиотеку, поддерживающую ее.
Интерфейс
Возможно, вы хотите иметь единый интерфейс входа для всех методов. Для этого может быть полезно расширение OpenID Selector .
База данных хранилища
Это самая сложная часть. Вам придется хранить данные аутентификации в какой-то базе данных. Многие люди захотят использовать mysql, некоторые postgresql, а некоторые могут даже захотеть хранить их в текстовых файлах. Даже если вы решите использовать только MySQL, в php есть много адаптеров, и они не являются взаимозаменяемыми. Конечно, для этого вам может потребоваться библиотека, например Doctrine , но, вероятно, она будет на несколько порядков больше, чем ваш проект. И это не будет хорошо интегрироваться с фреймворками.
В зависимости от ваших потребностей, наилучшим решением может быть требование от пользователя реализовать такие функции, как addAccount($type, $login, $password)
, userAuthenticated($login)
, checkPassword($login, $password)
и т. Д. Это, безусловно, дает наибольшую гибкость пользователю, но требует усилий для начать использовать его.
Я не говорю, конечно, что это решение идеально или даже хорошо для вашего случая - это лучшее, что я могу придумать сейчас.
Интеграция
Чтобы использовать механизм аутентификации, его необходимо интегрировать в приложение. Таким образом, вы не можете форсировать какой-либо конкретный интерфейс, но вы должны дать хороший по умолчанию. Вы не можете форсировать выбор базы данных, но вы должны упростить реализацию и , дающие хорошие, готовые к использованию примеры для некоторых распространенных случаев. Поэтому я бы рекомендовал отделить поддержку протокола от частей интерфейса и хранилища.
Вот и все. Я не могу думать ни о чем другом прямо сейчас.