Crear un proveedor de OpenID en PHP
zend-framework (6)
Tengo un sitio web existente que quiero convertir en un proveedor de OpenID. Todas mis cuentas de usuario están almacenadas en una tabla mysql.
Pensé que dado que un OpenID se representa como una URL, voy a hacer algo como: http://login.mydomain.com/username
Configuré un subdominio y creé un htaccess que redirige todas las URL a /login.php?username=[username]
De la forma en que lo veo, y me dicen si me equivoco, alguien va a decir StackOverflow, ingresan a http://login.mydomain.com/myUsername . Llegan a una página en mi servidor que les pide su contraseña (dado que ya conozco su nombre de usuario), verifico si coincide y devuelvo la clave.
La gente en línea recomendó usar Zend_OpenId_Provider. He estado leyendo su documentación ( http://framework.zend.com/manual/en/zend.openid.provider.html ), pero me parece muy confuso. No tienen un ejemplo del mundo real donde el usuario / contraseña se almacenen en una base de datos.
También he visto php-open-id ( http://github.com/openid/php-openid ), pero tampoco ayuda allí.
Parece ser una cosa bastante común de hacer. ¿Hay algún tutorial o un ejemplo que pueda adaptar fácilmente?
Mientras etiquetó esta pregunta con zend-framework creo que quiere implementar esto con ZF.
Mire al constructor del Zend_OpenId_Provider
public function __construct($loginUrl = null,
$trustUrl = null,
Zend_OpenId_Provider_User $user = null,
Zend_OpenId_Provider_Storage $storage = null,
$sessionTtl = 3600)
El más importante es el parámetro $storage
.
En el ejemplo de http://framework.zend.com/manual/en/zend.openid.provider.html , no pasan ningún parámetro. Eso significa que de forma predeterminada se Zend_OpenId_Provider_Storage_File
proveedor Zend_OpenId_Provider_Storage_File
. Nuevamente, este se almacenaría por defecto en archivos en su directorio TEMP ( /tmp
en Linux).
Básicamente, el ejemplo debería ser completamente funcional. Puede registrar algunos usuarios más llamando a $server->register($someid, $somepassword);
Pero como almacena cuentas por defecto en el directorio temporal, debe reemplazar esa línea por algo como esto (si está bien almacenar cuentas en archivos):
$dir = "/var/lib/myopenidusers";
mkdir($dir);
$server = new Zend_OpenId_Provider(null, null, null, new Zend_OpenId_Provider_Storage($dir) );
Ahora, si prefiere almacenar sus usuarios en una base de datos , debe implementar su propio Provider_Storage.
Eche un vistazo a la clase abstract class Zend_OpenId_Provider_Storage
. Estos son los métodos que debes implementar.
Puedes probar phpMyId . Vea la demostración de http://phpmyid.com/ . Todos los detalles sobre phpMyId se pueden encontrar en http://siege.org/phpmyid.php .
Puede probar JanRain Engage ( http://www.janrain.com/products/engage ). Es una interfaz simplificada para la integración OpenID con aplicaciones web. La versión gratuita debería ser lo suficientemente buena para todos los propósitos prácticos.
Usamos: http://source.keyboard-monkeys.org/projects/show/communityid
De su sitio web:
"Community-ID es una implementación de OpenID en PHP que cumple con OpenID 2.0. Community-ID se compila al 100% en software de código abierto y se publica bajo la licencia BSD. Los usuarios pueden realizar un seguimiento de sus sitios de confianza y administrarlos. a C-ID puede ser username / passowrd o One Time Password con Yubikey. Un usuario puede tener múltiples perfiles como con información de contacto privada o comercial.
Para los administradores de ID de comunidad, las estadísticas están disponibles para rastrear el registro de nuevos usuarios, usuarios autorizados por día o el número de sitios confiables. Los administradores pueden configurar el sitio en modo de mantenimiento o enviar correos electrónicos a todos los usuarios registrados.
Para los datos del usuario y la autenticación, el administrador puede elegir el almacenamiento predeterminado de db o conectarse a un servidor LDAP. El soporte confirmado actual es OpenLDAP. Otros servidores LDAP también deberían funcionar ".
SimpleID es un software de proveedor OpenID pequeño y agradable de usar + de instalación. Lo uso yo mismo y no me puedo quejar.
Intenté todo lo que se menciona aquí, ID de comunidad, simpleid, janrain, etc., junto con todos los que dicen ser proveedores de OpenID Wiki / Libraries y fallaron. Luego tropecé con Prairie y lo puse en funcionamiento en aproximadamente una hora. Un poco más de trabajo para cambiar las consultas en index.php y login.php y lo estaba haciendo funcionar contra mi tabla de usuarios.