rafa-carmo/ldap-connector

A simple ldap connector

v1.0.5 2024-06-25 16:20 UTC

This package is auto-updated.

Last update: 2025-07-25 18:34:23 UTC


README

License


Faça bind e busque usuarios de forma simples.

Dependências:

  • PHP 7.4

Como usar?

Laravel >= 8

1 - Instale a biblioteca

composer require rafa-carmo/ldap-connector

2 - Publique os arquivos de configuração:

 php artisan vendor:publish --tag=ldap-config --tag=ldap-service  

3 - Preencha as configuraçãos em seu .env:

LDAP_HOST="localhost" # Obrigatório
LDAP_USERNAME="Usuário para buscas" # Opcional
LDAP_PASSWORD="Senha do usuário acima" # Opcional
LDAP_PORT="Porta do Serviço" # Opcional - Padrão: 389
LDAP_TIMEOUT=5 # Opcional - Timeout padrão.

LDAP_BASE_DN="dc=example,dc=com" # Opcional - Dominio Base
LDAP_MAIL_DOMAIN=example.com # Opcional - Dominio para login com email

LDAP_AUTO_CREATE=false # Opcional - Para implementar lógica de criar usuário automático no primeiro acesso

4 - Instancie uma classe na sua area de login para fazer sua lógica:

# Exemplo ( Este é um exemplo para entender a lógica, aplique de acordo com seu projeto )
    $ldap = new LdapConnectService();
    # bind - Faz a verificação do usuário no servidor LDAP
    # Retorna True ou o erro.
    $bindAttempt = $ldap->bind($request->email, $request->password);

    # Caso tenha sucesso na validação do usuário faz o login
    if($bindAttempt === true) {
        # A função createOrUpdateLogin faz a validação no banco se o usuário ja existe
        # os parametros que devem ser passados são:
        # 1° - Classe de usuarios e autenticação
        # 2° - Caso vá atualizar ou criar o usuario, devem ser passados os dados que serão salvos no banco. (Atenção: A criação somente será efetuada caso  a variável LDAP_AUTO_CREATE esteja true)
        # 3° - Um array com o nome do campo a ser validado no banco
        # caso o login seja efetuado com sucesso irá retornar true, caso não irá retornar a mensagem de erro de usuário não cadastrado.
        $login = $ldap->createOrUpdateLogin(User::class, [], ["username" => $ldap->getUsername($request->email)]);

        # Caso tenha efetuado o login redireciona para a rota home
        if($login === true) {
            return redirect(route('home'));
        }

        # Sobreescreve a mensagem de erro para retornar ao usuário.
        $bindAttempt = $login;
    }

    # retorna a rota anterior com as mensagens de erro
    return redirect()->back()->withErrors([
        "error" => $bindAttempt
    ]);

Personalizando o serviço:

Para manipular o funcionamento do serviço basta alterar o arquivo localizado em App\Http\Services\LdapConnectService.php

Funções da classe:

Função privada - createConnection:

Cria a conexão inicial com o servidor ldap

Função privada - sanitize:

Limpa a string de busca para evitar LDAP injection

Função pública - getUsername:

Limpa e padroniza o username

Função pública - genLoginString:

Função para gerar o login que será feito no servidor LDAP,

Caso seu login deva ser de uma forma diferente favor personalizar esta função no arquivo.

exemplo 1: Caso seja login com email login: usuario.nome a função fará o login fazendo a concatenação com o dominio: usuario.nome@dominio.com

exemplo 2: Caso seja login com uid. usuário: usuario.nome a função fará o login fazendo a concatenação com o base_dn: ud=usuario.nome,dc=example,dc=com

Função pública - bind:

Fará o bind com o servidor LDAP para validar o usuário.

Retornos: True para validado / Mensagem de Error.

Função pública - findUser:

Esta função somente irá ser utilizada caso estejam configuradas as variáveis LDAP_USERNAME e LDAP_PASSWORD

Ela fará a busca de usuários no servidor LDAP.

Recebe 2 parâmetros:

  • Login de busca ( caso tenha @ o tipo de busca será mail por padrão )
  • Tipo de busca ( caso seja deixado em branco ira buscar por uid )

Função pública - createOrUpdateLogin:

Fará a criação ou atualização de um cadastro no banco de dados do sistema.

Obs: A criação somente será efetuada caso a variável LDAP_AUTO_CREATE seja true.

Parametros da função:

  • 1° - Model do usuário.
  • 2° - Array com os dados para criação ou atualização do usuário.
  • 3° - Array com os dados de busca do usuário.

Retornos da função:

  • True - Caso o login seja efetuado com sucess.
  • Mensagem de Erro.

Como Contrubuir?

  • Faça um Fork do Projeto.
  • Clone o projeto no seu repositório
  • Crie uma nova branch com a funcionalidade git branch -b nova-funcionalidade
  • commit a nova funcionalidade `git commit -m "feat: funcionalidade"
  • Faça um push no seu fork git push origin main
  • No seu repositório clique em Contribute e abra uma pull request

Obrigado, Qualquer sujestão fique a vontade para criar uma issue.