|
Seguridad: Cómo validar en un servidor LDAP con PHP, obtener datos servidor LDAP desde PHP
Explicamos en este artículo cómo realizar un formulario HTML con PHP que permita validación en un servidor LDAP (Active Directory de Microsoft Windows Server 2000, 2003, 2008). Utilizaremos el lenguaje PHP para validar un usuario contra un servidor LDAP. Este ejemplo servirá para dotar a nuestra aplicación web de inicio de sesión en el servidor LDAP. Explicamos también cómo realizar consultas a un servidor LDAP para obtener datos de los usuarios.
LDAP (Lightweight Directory Access Protocol ó Protocolo Ligero de Acceso a Directorios)LDAP (Lightweight Directory Access Protocol ó Protocolo Ligero de Acceso a Directorios) es un protocolo a nivel de aplicación que permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. Un directorio es un conjunto de objetos con atributos organizados en una manera lógica y jerárquica. Un árbol de directorio LDAP a veces refleja varios límites políticos, geográficos u organizacionales, dependiendo del modelo elegido. Los despliegues actuales de LDAP tienden a usar nombres de Sistema de Nombres de Dominio (DNS) para estructurar los niveles más altos de la jerarquía. Conforme se desciende en el directorio pueden aparecer entradas que representan personas, unidades organizacionales, impresoras, documentos, grupos de personas o cualquier cosa que representa una entrada dada en el árbol (o múltiples entradas). Habitualmente, almacena la información de autenticación (usuario y contraseña) y es utilizado para autenticarse, aunque es posible almacenar otra información (datos de contacto del usuario, ubicación de diversos recursos de la red, permisos, certificados, etc). Un cliente inicia una sesión de LDAP conectándose a un servidor LDAP, por defecto en el puerto TCP 389. El cliente envía una petición de operación al servidor, y el servidor envía respuestas. Con algunas excepciones, el cliente no necesita esperar una respuesta antes de enviar la siguiente petición, y el servidor puede responder en cualquier orden. El cliente puede requerir las siguientes operaciones:
Además, el servidor puede enviar "notificaciones no solicitadas" que no son respuestas a ninguna petición, por ejemplo antes de que se termine el tiempo de conexión. LDAP es definido en términos de ASN.1, y los protocolos del mensaje están codificados en el formato binario BER. Sin embargo, utiliza representaciones textuales para un número de campos y tipos ASN.1. Estructura de directorio LDAPEl protocolo accede a directorios LDAP, que siguen la edición de 1993 del modelo X.500:
Para hacer más confiables e identificar de manera no ambigua las entradas un UUID podría ser proporcionado en el conjunto de los atributos operacionales de la entrada.
Implementación Active Directory basada en LDAPActive Directory es el nombre utilizado por Microsoft (desde Windows 2000) como almacén centralizado de información de uno de sus dominios de administración. Un Servicio de Directorio es un depósito estructurado de la información de los diversos objetos que contiene el Active Directory, en este caso podrían ser impresoras, usuarios, equipos... Bajo este nombre se encuentra realmente un esquema (definición de los campos que pueden ser consultados) LDAP versión 3, lo cual permite integrar otros sistemas que soporten el protocolo. En este LDAP se almacena información de usuarios, recursos de la red, políticas de seguridad, configuración, asignación de permisos, etc.
Requisitos para validación de nuestro sitio web con Apache y PHP en un servidor LDAPA continuación exponemos los requisitos para que una aplicación desarrollada en PHP para un servidor web Apache pueda validar en un servidor LDAP (en nuestro caso con Windows Server 2003 y la implementación de LDAP de Microsoft Active Directory). Servidor con protocolo LDAP (Windows Server 2003 y Active Directory)En primer lugar necesitaremos disponer de un servidor con el protocolo LDAP, en nuestro caso usaremos el equipo controlador de dominio de nuestra red con el sistema operativo Microsoft Windows Server 2003 y los servicios de Active Directory activados. A continuación mostramos algunos manuales interesantes para estos menesteres:
Instalación de Windows Server 2003 Enterprise Edition SP2
Promocionar servidor Windows 2003 a controlador principal de dominio
Servidor web con Apache y PHPComo segundo componente necesitaremos un servidor web con Apache (puede servir Internet Information Server con las extensiones para soporte con PHP) y PHP. A continuación mostramos algunos manuales interesantes para estos menesteres:
Cómo instalar y configurar un Servidor Web en Windows con Apache y PHP-Nuke Montar un servidor web y un sitio web en Windows 7 con AppServ y Joomla! Instalar y configurar Internet Information Server en Windows XP
Configurar y activar acceso a LDAP en PHPAl instalar Apache, el soporte para LDAP en PHP suele venir desactivado. Explicamos a continuación cómo activarlo en unos sencillos pasos. En primer lugar, para activar el soporte de PHP para LDAP deberemos abrir el fichero php.ini de PHP, que en sistemas operativos Windows suele estar en la carpeta del sistema operativo, en:
Lo editaremos pulsando sobre él y seleccionando "Editar" ó "Abrir": Buscaremos la línea
que cambiaremos quitándole el punto y coma inicial ";", quedará:
Cerraremos el editor y guardaremos los cambios: Deberemos verificar que existe la librería "php_ldap.dll", ha de estar en la carpeta "ext" de la instalación de Apache y PHP: Para que los cambios se apliquen será conveniente reiniciar el servicio de Apache, pulsando la tecla de Windows + R, escribiendo "services.msc" y pulsando "Aceptar": Desde los servicios, seleccionaremos el servicio de Apache, en nuestro caso "Apache2.2", pulsaremos sobre él con el botón derecho y seleccionaremos "Reiniciar":
Validar en un servidor LDAP con PHPTras configurar el servidor web para que soporte acceso a LDAP (como explicamos aquí), abriremos cualquier editor de texto plano (como Notepad) y escribiremos el siguiente código PHP: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Validación en servidor LDAP con PHP</title> </head> <body> <?php //desactivamos los erroes por seguridad error_reporting(0); //error_reporting(E_ALL); //activar los errores (en modo depuración) $servidor_LDAP = "nombre_servidor"; $servidor_dominio = "nombre_dominio_servidor.com"; $ldap_dn = "dc=nombre_dominio_servidor,dc=com"; $usuario_LDAP = "usuario_servidor"; $contrasena_LDAP = "contraseña_usuario"; echo "<h3>Validar en servidor LDAP desde PHP</h3>"; echo "Conectando con servidor LDAP desde PHP..."; $conectado_LDAP = ldap_connect($servidor_LDAP); ldap_set_option($conectado_LDAP, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($conectado_LDAP, LDAP_OPT_REFERRALS, 0); if ($conectado_LDAP) { echo "<br>Conectado correctamente al servidor LDAP " . $servidor_LDAP; echo "<br><br>Comprobando usuario y contraseña en Servidor LDAP"; $autenticado_LDAP = ldap_bind($conectado_LDAP, $usuario_LDAP . "@" . $servidor_dominio, $contrasena_LDAP); if ($autenticado_LDAP) { echo "<br>Autenticación en servidor LDAP desde Apache y PHP correcta."; } else { echo "<br><br>No se ha podido autenticar con el servidor LDAP: " . $servidor_LDAP . ", verifique el usuario y la contraseña introducidos"; } } else { echo "<br><br>No se ha podido realizar la conexión con el servidor LDAP: " . $servidor_LDAP; } ?> </body> </html> Para realizar la validación hemos usado las siguientes funciones PHP:
Formulario PHP para petición de usuario y contraseña y validación en LDAP--CONTINUARÁ--
Obtener datos de los usuarios de un servidor LDAP con PHP--CONTINUARÁ--
Artículos relacionados
CréditosArtículo realizado íntegramente por Alonsojpd miembro fundador del proyecto AjpdSoft. Anuncios
Enviado el Martes, 19 octubre a las 01:03:24 por ajpdsoft
|
|