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

Клиент вызывает метод checkid_setup на сервере, тот возвращает результат подтверждения авторства. Также клиент вызывает метод associate, и судя по логам больше ничего. Вся тряхомудия внутри openid относится к способу передачи данных между клиентом и сервером. Данные передаются в виде post или get запросов, то бишь в виде длинной простыни в адресной строке, если делается get запросом. Много воды о формате параметров, ну типа пространство имен, обязательные параметры, желательные параметры, и прочая херня. Там все просто, но объяснено через жопу. Убил бы всех разработчиков openid за муть, которую они писали. Ну а параметры в, поскольку находятся в урле, то постоянно перебрасывается ридиректом, чтобы типа сохранить данные между сайтом клиента и сервера. А ведь можно было бы обойтись гораздо меньшей кровью.

Рассмотренные мной библиотеки шли по пути документации по openid и унаследовали весь гемморой, который есть в документации. Все гораздо проще, чем существующие объяснения. Мой вывод - в топку дебилов. Единственную нормальную либу, которую я встретил - это Simple OpenID PHP Class, но это клиентская часть, хорошо бы иметь нечто такое для сервера.