rafa-carmo/ldap-connector

简单的ldap连接器

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

This package is auto-updated.

Last update: 2024-09-25 16:45:30 UTC


README

License


轻松进行绑定并搜索用户。

依赖项

  • PHP 7.4

如何使用?

Laravel >= 8

1 - 安装库

composer require rafa-carmo/ldap-connector

2 - 发布配置文件

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

3 - 在 .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 - 在您的登录区域实例化一个类以执行您的逻辑

# 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
    ]);

自定义服务

要操作服务的功能,只需更改位于 App\Http\Services\LdapConnectService.php 的文件

类函数

私有函数 - createConnection

创建与ldap服务器的初始连接

私有函数 - sanitize

清理搜索字符串以防止LDAP注入

公共函数 - getUsername

清理并标准化用户名

公共函数 - genLoginString

生成将用于LDAP服务器的登录函数

如果您的登录方式不同,请在此文件中自定义此函数。

示例 1:如果是以邮箱登录,登录:usuario.nome,函数将进行登录,将域添加到:usuario.nome@dominio.com

示例 2:如果是以uid登录,用户:usuario.nome,函数将进行登录,将base_dn添加到:ud=usuario.nome,dc=example,dc=com

公共函数 - bind

将LDAP服务器进行绑定以验证用户。

返回:True表示已验证 / 错误信息。

公共函数 - findUser

如果已配置 LDAP_USERNAMELDAP_PASSWORD 变量,则将使用此函数。

将在LDAP服务器上搜索用户。

接收2个参数

  • 搜索登录(如果有@,则默认为邮件搜索)
  • 搜索类型(如果留空,则默认为uid)

公共函数 - createOrUpdateLogin

将在系统数据库中创建或更新一个登记。

注意:只有在 LDAP_AUTO_CREATE 变量为true时才会执行创建。

函数参数

  • 1° - 用户模型。
  • 2° - 包含创建或更新用户数据的数组。
  • 3° - 包含用户搜索数据的数组。

函数返回值

  • True - 登录成功。
  • 错误信息。

如何贡献?

  • 对该项目进行 Fork
  • 在您的仓库中克隆项目
  • 创建一个带有新功能的分支 git branch -b nova-funcionalidade
  • 提交新功能 `git commit -m "feat: funcionalidade"
  • 将您的fork推送到远程 git push origin main
  • 在您的仓库中点击Contribute并打开一个 pull request

谢谢,任何建议都可以创建一个issue。