有没有关于如何设置ldap服务器以及将其与简单的laravel应用程序连接之后的教程?

时间:2019-04-23 12:38:14

标签: laravel ldap

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

1 个答案:

答案 0 :(得分:0)

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

Adldap2-Laravel(NoDatabaseProvider)

安装

安装Adldap2-laravel软件包:

  

$作曲家需要adldap2 / adldap2-laravel

创建身份验证支架:

  

$ php artisan make:auth

配置

.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 文件中,将电子邮件地址的标签更改为用户名,并删除@error('email)部分从相应的文本输入中,并将该文本输入上的名称更改为您要查找用户的任何LDAP属性(samaccountnameuserprincipalname)。完成的文本输入应类似于以下内容:

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

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

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

  

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

     

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

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

# /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 中:

  • providerDatabaseUserProvider更改为NoDatabaseUserProvider
# /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;并在文件的开头添加其他 use 合同,则可以访问经过身份验证的用户的属性,如下所示:
# /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;与其他 use 合同一起添加,并使用查询构建器:
# /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
}