2009-12-29 17 views
6

Sé que preguntas como esta se han hecho muchas veces, pero no del todo esta. Perdóname si pasé por alto un duplicado obvio.Biblioteca básica de autenticación y gestión de sesiones para PHP

En el núcleo de muchas de mis aplicaciones web hay una clase de administración de sesión/usuario autoeditada que en sus orígenes data de 2002. He decidido que es hora de una relectura fundamental o, preferiblemente, la introducción de una biblioteca estándar ya hecha.

Mis requisitos para esa biblioteca serían:

  • orientado a objetos,, excelente código limpio
  • gestión de sesiones completo: Envoltura a session_start() y consortes
  • lo ideal sería proporcionar varios métodos de almacenamiento (PHP Estándar/tmp, basado en base de datos)
  • Lo ideal sería que pueda conectarse a diferentes tipos de almacenamiento de datos de usuario, pero mySQL funcionará bien
  • Lo ideal sería proporcionar conveni funciones ent para apoyar OpenID, pero eso es un pensamiento de fantasía, ningún requisito en este momento
  • Métodos: Verificar la sesión, obtener los datos del usuario, obtener datos de la sesión, inicie sesión en el usuario, cerrar la sesión de usuario
  • Ajustes: duración de la sesión, el cifrado de contraseñas
  • debe estar abierto Fuente

Y si es muy genérico, una API de gestión de usuarios o un conector genérico para la gestión de usuarios de la aplicación que rodea estaría bien:

  • Crear/actualizar/borrar registros de usuario
  • Fetch y modificar los datos de usuario actualmente conectado

esto es tan básico y tan relevante para la seguridad, que yo esperaría que hay una solución estándar a esto, sin embargo, no conozco ninguno, y todos los grandes CMS y blogs parecen estar funcionando por sí mismos.

Mis dos preguntas:

  • ¿Conoce un componente como un genérico, biblioteca independiente ?

  • Podría alguien con un conocimiento profundo de Zend Framework dígame si es posible utilizar Zend_Auth y/o Zend_Session independiente, en el centro de una gran aplicación que tiene por lo demás nada que ver con ZF, sin correr ¿en problemas?

+0

https://github.com/auraphp/Aura.Auth. Si lo necesita, puede envolver https://github.com/auraphp/Aura.Session. Puede ser ayudar a alguien más. –

+1

Es posible que desee echarle un vistazo a https://github.com/delight-im/PHP-Auth, que es tanto agnóstico de la estructura como agnóstico de la base de datos. – caw

Respuesta

2

Podría alguien con un conocimiento profundo en Zend Framework dime si es posible utilizar Zend_Auth y/o independiente Zend_Session, en el centro de una gran aplicación que tiene por lo demás nada que ver con ZF, sin correr en ¿Complicar?

no tengo conocimiento profundo del Zend Framework, pero he utilizado diversos componentes (por ejemplo Zend_Search) sin crear un objeto Zend_Application o utilizando el framework MVC y estoy seguro de que el resto de la biblioteca también está diseñado ser totalmente modular. La última vez que cavé en el código de Zend_Session, no encontré ningún incluye fuera de Zend/Session/. Un quick google parecía confirmar esto para Zend_Auth, junto con la AYUDA Zend que establece:

Es ZF una biblioteca de componentes o de un marco?
Respuesta simple: ambos. Zend Framework proporciona todos los componentes necesarios para la mayoría de las aplicaciones web en una sola distribución. Pero los componentes de Zend Framework también se acoplan de forma flexible, por lo que es fácil usar solo algunos componentes en una aplicación web, ¡incluso junto a otros frameworks! Usando esta arquitectura de uso a voluntad, estamos implementando características que se encuentran comúnmente en marcos más monolíticos. De hecho, actualmente estamos trabajando en un componente de herramientas para la versión 1.8 que simplificará la creación de aplicaciones que usen componentes ZF, pero no sacrificará la naturaleza de uso a voluntad de los componentes ZF existentes. Es un testimonio de la arquitectura de uso a voluntad de Zend Framework que el propio componente de herramientas se puede usar de forma independiente.

Lo único que tenía que hacer cuando no se utiliza Zend_Search con el marco MVC fue añadir el directorio en el que instaló el Zend Framework a la ruta de inclusión debido a la incluye en la biblioteca Zend. La documentación no documenta los datos que usted necesita cuando no utiliza el autocargador Zend, pero como todo usa el esquema de nombres de clase PEAR, es fácil de deducir de los nombres de clase que está utilizando. (por lo que la clase Foo_Bar_File requeriría que incluya Foo/Bar/File.php)

+0

Gracias por la respuesta Yacoby. Creo que voy a profundizar en ello y probar ZF. –

1

Hay varias bibliotecas OpenID disponibles.

http://wiki.openid.net/Libraries#php

Para el resto que también podría rodar su propia, ya que encontrar la biblioteca de otra persona, probablemente sería más problemas de lo que vale la pena.

+0

Gracias por el enlace openID. En cuanto al mío: una biblioteca estándar bien documentada debería ser posible de resolver con bastante rapidez. Mi esperanza es que haya uno por ahí. –

0

Tengo entendido que no hay una biblioteca estándar porque no hay una definición estándar de lo que es un usuario.

En algunas de mis aplicaciones, los usuarios simplemente inician sesión para hacer cosas. En otros, los usuarios son parte de una empresa y sus permisos y acceso a los datos están limitados por los límites de esa empresa y el nivel de suscripción pagado por la empresa. En otras aplicaciones, algunos usuarios son administradores con acceso a todo, algunos usuarios son administradores con acceso a algunos datos (nivel de fila) y otros usuarios son los clientes de esos administradores, con acceso únicamente a sus propios datos. Algunos usuarios están vinculados a empresas/empresas/clientes, otros usuarios no. Algunos usuarios son solo un nombre de usuario y contraseña, otros son un gran gráfico de objetos con clientes, historiales de pedidos, preferencias de informes, comentarios, etc.

Tal vez estoy equivocado y hay una forma clara de resumir todos esos requisitos en un sistema que no requiere cinco capas de subclases y mil hits de DB para registrar a alguien. Sin embargo, no lo he encontrado.

+0

Creo que me leiste mal. No estoy * hablando * de ningún tipo de gestión de control de acceso. Estoy hablando solo de los hechos básicos: el usuario inicia sesión, el usuario cierra la sesión. Tal vez, el usuario cambie su contraseña. Nada más. Puedo estar equivocado, por supuesto, pero desde mi experiencia esto es de muy bajo nivel y debería ser bastante estandarizable. –

+0

Supongo que todavía no entiendo. ¿De qué sirve iniciar sesión un usuario si eso no le da control de acceso? ¿No es eso lo que significa "iniciar sesión"? –

+0

Solo necesito una API genérica que, en esencia, me diga quién es el usuario que ha iniciado sesión (es decir, con qué credenciales ha iniciado sesión). El resto (= control de acceso, comprobar si se les permite hacer la acción solicitada, etc.) correspondería a la aplicación web. La API solo sabe que el usuario con la ID 123 está conectado al sistema. Puede hacer cosas con este usuario (iniciar sesión, cerrar sesión ...) pero nada más. –

6

¿Puedo sugerir la biblioteca de autenticación que he escrito? Es una biblioteca genérica (no está escrita ni es parte de un marco): http://ulogin.sourceforge.net

+0

Interesante, gracias! Voy a verlo en algún momento. –

Cuestiones relacionadas