首页 > 解决方案 > 是否有关于如何设置 ldap 服务器以及之后将其与简单的 laravel 应用程序连接的教程?

问题描述

我使用 DigitalOcean 教程设置了 ldap 并安装了 AdLdap2 包,如果有人可以向我解释为什么在登录 ldap 服务器时仍然尝试使用默认用户名和密码登录,我无法正确解释问题,如果它没有对你有感觉,你能不能在这里放一些链接来帮助你设置服务器并用 ldap 连接一个 laravel 项目

标签: laravelldap

解决方案


我知道我来晚了,但这些是我为我的一个应用程序设置它时的笔记。

Adldap2-Laravel (NoDatabaseProvider)

安装

安装 Adldap2-laravel 包:

$ 作曲家需要 adldap2/adldap2-laravel

创建身份验证脚手架:

$ php工匠制作:身份验证

配置

在.env文件中定义以下环境变量:

# .env

LDAP_HOSTS=[192.168.1.10]
LDAP_PORT=[389]
LDAP_BASE_DN=[DC=contoso,DC=com]
LDAP_USERNAME=[ldap@contoso.com]
LDAP_PASSWORD=[password123]

如果仅使用 LDAP 身份验证,则禁用默认路由。在您的/routes/web.php文件中,对 进行以下更改Auth::routes()

# /routes/web.php

Auth::routes([
  'reset'    => false,
  'verify'   => false,
  'register' => false,
])

在您的/resources/views/auth/login.blade.php文件中,将电子邮件地址的标签更改为Username,从相应的文本输入中删除该@error('email)部分并将该文本输入上的名称更改为您正在查找用户的任何 LDAP 属性by ( samaccountnameor userprincipalname) 完成的文本输入应该类似于以下内容:

# /resources/views/auth/login.blade.php

<input type="text" class="form-control" name="samaccountname" value="{{ old('samaccountname') }}" required autofocus>

通过运行以下两个命令创建ldap.phpldap_auth.php文件:

$ php artisan vendor:publish --provider "Adldap\Laravel\AdldapServiceProvider"

$ php artisan vendor:publish --provider "Adldap\Laravel\AdldapAuthServiceProvider"

providers/config/auth.php下更改用户驱动程序以使用 ldap 而不是 eloquent并注释掉它下面的模型,如下所示:

# /config/auth.php

  'providers' => [
      'users' => [
          'driver' => 'ldap', // <- was eloquent, changed to ldap
          # 'model'  => App\User::class, // <- commented out, not using anymore

/config/ldap_auth.php

  • provider将从更改DatabaseUserProviderNoDatabaseUserProvider
# /config/ldap_auth.php

  'provider' => Adldap\Laravel\Auth\NoDatabaseProvider::class
  • locate_users_by将下更改为ldap您计划通过 (samaccountnameuserprincipalname)对用户进行身份验证的任何字段
# /config/ldap_auth.php

  'ldap' => [
    'locate_users_by' => 'samaccountname',
    'bind_users_by'   => 'distinguishedname',
  ],

在您的/app/Http/Controllers/Auth/LoginController.php文件中,您必须添加一个username()函数,该函数返回您正在通过以下方式对用户进行身份验证的 LDAP 属性:

# /app/Http/Controllers/Auth/LoginController.php

  public function username()
  {
    return 'samaccountname';
  }

在您的/config/app.php文件中,添加 Adldap Facade 的别名会很有帮助,这样您就不必在每次需要访问它时都输入它:

# /config/app.php

  'aliases' => [

    'App' => Illuminate\Support\Facades\App::class,
    'Arr' => Illuminate\Support\Arr::class,
    . // scroll
    . // to
    . // the
    . // bottom
    'View' => Illuminate\Support\Facades\View::class,
    'Adldap' => Adldap\Laravel\Facades\Adldap::class // <- add this

  ],

用法

  • 成功验证后,如果您在文件开头添加use Auth;带有其他使用合同的控制器,您可以访问已验证用户的属性,如下所示:
# /app/Http/Controllers/HomeController

use Auth;

public function index()
{
  $user = Auth::user();
  $cn = $user->getCommonName(); // assigns currently authenticated user's Common Name
  return view('home')->with('cn', $cn);
  // using {{ $cn }} on the home's view would output the Common Name
}

  • 如果要查询所有其他用户的 LDAP 服务器,可以添加use Adldap;其他使用合同并使用查询构建器:
# /app/Http/Controllers/HomeController

use Adldap;

public function index()
{
  $users = Adldap::search()->where('objectclass', '=', 'person')->sortBy('cn', 'asc')->get();
  return view('home', compact('users'))
  // use a foreach loop on the view to iterate through users and attributes
}


推荐阅读