2010-07-08 12 views
12

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.Crear un proveedor de OpenID en PHP

que pensé desde un OpenID se representa como un URL, voy a hacer algo como: http://login.mydomain.com/username

he configurar un subdominio, y creó un .htaccess que redirige todas las direcciones URL a /login.php?username = [nombre de usuario]

La forma en que lo veo, y dime si estoy equivocado, alguien va a decir StackOverflow, ingresan 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 ninguna ayuda allí.

Parece ser una cosa bastante común de hacer. ¿Hay algún tutorial o un ejemplo que pueda adaptar fácilmente?

+1

Me gustaría obtener algunos ejemplos de esto también. Me dirijo a convertirse en proveedor de OpenID también, podríamos colaborar. Planeo usar Janrain OpenID habilitado: http://www.janrain.com/openid-enabled, ya que Zend ha fallado algunos de mis requisitos. Y me temo que debes leer la fuente ... – jayarjo

+0

Estoy abierto a OpenID-enabled o cualquier otro. Es tan difícil encontrar ayuda para convertirse en un proveedor. He establecido una pequeña recompensa por la pregunta. Tal vez ayude ... Vota por esta pregunta. –

+0

La calidad de la documentación oficial de Zends es deficiente. Difícilmente proporcionan ejemplos del mundo real. – jantimon

Respuesta

8

Como se ha etiquetado a esta pregunta con Zend-marco Creo que desea implementar esto con ZF.

Mira el constructor de la 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 único importante es el parámetro $storage.

En el ejemplo de http://framework.zend.com/manual/en/zend.openid.provider.html que no pase ningún parámetro. Eso significa que por defecto se usa el proveedor Zend_OpenId_Provider_Storage_File. Una vez más, este se almacenaría por defecto en los archivos en su directorio TEMP (/tmp en Linux).

Básicamente, el ejemplo debería ser completamente funcional. Podría registrar algunos más usuarios llamando $server->register($someid, $somepassword);

Pero ya que almacena las cuentas por defecto en el directorio temporal, se debe reemplazar esa línea por algo como esto (si está bien a cuentas de tiendas en archivos):

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

Ahora, si usted prefiere tienda de sus usuarios en una base de datos que tienen que poner en práctica su propia Provider_Storage.

Tener un vistazo a la clase abstracta abstract class Zend_OpenId_Provider_Storage. Estos son los métodos que debes implementar.

+0

Tenga en cuenta que ya tengo todos mis usuarios en mi base de datos. ¿Todavía necesito "registrarlos"? –

+0

Parece que tengo que escribir todo. Solo quiero que la parte de "inicio de sesión" se haga a través de mi tabla mysql. Aquí necesito implementar todo el código desde cero, la mayoría de los cuales ni siquiera entiendo ... –

1

Usted puede intentar 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.

+1

Engage es ACEPTAR OpenId, no ser un proveedor. Usted podría estar pensando en FEDERATE, que no es gratis. –

0

Utilizamos: http://source.keyboard-monkeys.org/projects/show/communityid

Desde su página web:

"Comunidad-ID es una implementación de OpenID en PHP que es OpenID 2.0 compatible Comunidad-ID es construir a 100% en software de código abierto y es. versión bajo la licencia BSD. Los usuarios pueden realizar un seguimiento de sus sitios de confianza y administrarlos. El inicio de sesión en C-ID puede ser username/passowrd o One Time Password con Yubikey. Un usuario puede tener múltiples perfiles como información de contacto privada o comercial

Para los administradores de ID de comunidad hay estadísticas disponibles para rastrear registro de nuevos usuarios, usuarios autorizados por día o la cantidad de sitios confiables. Los administradores pueden configurar el sitio en modo de mantenimiento o enviar correos electrónicos a todos los usuarios registrados.

Para datos de usuario y 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 deben trabajar bien."

+0

Estoy intentando configurar esto, tengo una pequeña empresa conmigo y 3 personas más, tenemos 4 sitios web en funcionamiento y me gustaría tener SSO, configuré la parte de SSO, pero no estoy seguro de cómo reenviar los otros sitios para iniciar sesión. con este :/ – MRVDOG

0

SimpleID es un pequeño y agradable de usar + configuración del software proveedor de OpenID. Yo lo uso yo y no se quejan.

2

Probé todo lo que aparece aquí, Comunidad de identificación, simpleid, janrain, etc., junto con todos aquellos que afirman ser proveedores de OpenID Wiki/Libraries y fallaron. Luego tropecé con Prairie y lo ejecuté en aproximadamente una hora. Un poco más de trabajo para cambiar las consultas en index.php y login.php y me estaba poniendo a trabajar en contra de mi tabla de usuario.

Cuestiones relacionadas