Es posible crear un servidor LDAP de PHP puro con esta biblioteca (lo escribí inicialmente para fines cliente LDAP):
https://github.com/FreeDSx/LDAP
Funciona sobre la base de un controlador de solicitudes (sólo una interfaz) para las solicitudes de los clientes. Básicamente, extiendes una clase que gestionará las solicitudes de los clientes y enviará una respuesta de vuelta (en el caso de una búsqueda de todos modos).Un ejemplo básico:
- Crear un controlador de solicitudes extender el administrador de solicitud genérica en la biblioteca:
namespace Foo;
use FreeDSx\Ldap\Server\RequestHandler\GenericRequestHandler;
class LdapRequestHandler extends GenericRequestHandler
{
/**
* @var array
*/
protected $users = [
'user' => '12345',
];
/**
* Validates the username/password of a simple bind request
*
* @param string $username
* @param string $password
* @return bool
*/
public function bind(string $username, string $password): bool
{
return isset($this->users[$username]) && $this->users[$username] === $password;
}
/**
* Override the search request. This must send back an entries object.
*
* @param RequestContext $context
* @param SearchRequest $search
* @return Entries
*/
public function search(RequestContext $context, SearchRequest $search): Entries
{
// Do your logic here with the search request, return entries...
return new Entries(
Entry::create('cn=Foo,dc=FreeDSx,dc=local', [
'cn' => 'Foo',
'sn' => 'Bar',
'givenName' => 'Foo',
]),
Entry::create('cn=Chad,dc=FreeDSx,dc=local', [
'cn' => 'Chad',
'sn' => 'Sikorra',
'givenName' => 'Chad',
])
);
}
}
- Utilizando el controlador de solicitudes, cree un servidor LDAP proceso que escucha en el puerto 389 para los clientes:
use FreeDSx\Ldap\LdapServer;
use Foo\LdapRequestHandler;
$server = new LdapServer([ 'request_handler' => LdapRequestHandler::class ]);
$server->run();
hay más documentos sobre el borrador del servidor por componentes de la biblioteca aquí:
https://github.com/FreeDSx/LDAP/tree/master/docs/Server
algunas advertencias a esto:
- Actualmente no hay soporte de paginación/VLV para el servidor
- Actualmente no hay manera de volver controles del controlador de solicitudes de vuelta al cliente.
OpenLDAP se puede configurar para [utilizar una base de datos SQL como back-end] (http://www.openldap.org/doc/admin24/backends.html) directamente. No es tan completo como el BDLD de OpenLDAP nativo, pero podría satisfacer sus necesidades sin una línea de PHP. (¿Cuál no sería mi primera opción de lenguaje de implementación para un nuevo servidor LDAP, no por una gran posibilidad :) :) – sarnold
Había intentado volver al trabajo de sql hace un tiempo, pero finalmente me rendí porque ni siquiera podía conseguirlo compilar correctamente Básicamente tenemos un CRM basado en PHP/MySQL, y de alguna manera tenemos que hacer que los contactos estén disponibles para Thunderbird como una libreta de direcciones. Supongo que podríamos usar un servidor LDAP real y hacer que nuestro CRM (como cliente) actualice la base de datos LDAP, pero eso parece realmente ineficiente. Me pregunto si sería más fácil crear un complemento de libreta de direcciones JSON para Thunderbird, y omitir LDAP por completo. – Nick