将Windows Server中的Active Directory与Laravel 5集成用于多个用户角色

时间:2017-06-30 10:48:38

标签: php mysql laravel authentication active-directory

我正在使用多种类型用户的laravel应用程序。

用户

  • Admin
  • User-I
  • User-II
  • User-III

我已在我的应用中为用户创建了CRUD功能,并在用户创建期间分配了角色。我有以下UserRole表的结构。

角色表

    Schema::create('roles', function (Blueprint $table) {

        $table->increments('id');

        $table->string('role');

        $table->string('description');

        $table->timestamps();

    });

用户表

    Schema::create('users', function (Blueprint $table) {

        $table->increments('id');

        $table->integer('role_id');

        $table->string('name');

        $table->string('email')->unique();

        $table->string('password');

        $table->rememberToken();

        $table->timestamps();

    });

Admin用户是使用Seeder创建的,其他users是从应用程序创建的。

我差不多完成了我的申请,最后我遇到了用户身份验证的问题。

对于我的应用程序,我需要从 Active Directory 同步User-I类型。所以,我对User-IIUser-III的CRUD设施有限。我不想创建新的User-I类型用户,并希望从活动目录导入此类用户详细信息。对User-I所做的任何更改都应反映在我的应用中。

我的应用程序最近需要此功能。

我已经访问过Adldap2 - Laravel,我无法理解如何在我的情况下使用此功能。

有没有办法将这些用户详细信息导入我的应用程序?

另一个问题是,

导入此类用户详细信息后,我需要从Active Directory和我的应用程序User-I表中的其他用户验证users。 Laravel有可能吗?

我是 Windows Server 的新手,并使用 Active Directory 。任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

是的,这是可能的,但它有点乱。

我建议您在Laravel中设置所有用户帐户。如果是La用户(在这种情况下,身份验证将基于LDAP)或CRUD用户(在这种情况下,您需要触摸Laravel数据库以检查存储的密码是否有效),您可以向Laravel用户添加标志。您需要在登录过程中写一个额外的步骤,立即将AJAX用户名或两步屏幕,用户只需输入用户名并点击输入即可。这样,您就可以根据用户的标志知道哪种方式进行身份验证。

如果您需要做的就是根据一组用户称为用户I类型对AD进行身份验证,这很容易使用直接php - 只需检查您是否可以使用用户名&密码。如果它绑定,它们将通过身份验证,并可以进入您的应用程序。

但是,如果您希望在某个时间轴上与AD同步,您实际上会在AD用户群的某个子集上提取数据,那么为了决定谁将成为用户,您必须更多地参与其中。它也是一个与登录/身份验证不同的过程。

如果是这种情况,您将需要AD中的Windows服务帐户。使用这些凭据,从Larvel登录到AD并执行ldap_searches从AD中提取一组条目。用于说明PHP搜索/过滤方向的伪代码:

$filter = "(&($extLocField=$extLocName)(|(objectCategory=person)(mail=*)))";
$result = ldap_search($ldap_con,"dc=mycompany,dc=local",$filter) or exit("Unable to search");

获得条目(搜索结果中的ldap_get_entries)后,您可以根据过滤条件选择新用户

 $entries = ldap_get_entries($ldap_con, $result);

一旦有了新的用户组,您的代码将需要批量创建新用户并将AD标志添加到用户。

使用服务帐户尝试与AD同步对于直接PHP来说并不错。你真的不需要另一个包(Adldap2 - Laravel)。但是,尝试同步,并有两种不同的登录方法并尝试根据某些时间线方案从AD创建新用户似乎正在尝试做很多事情。以上是关于如何做的一个答案。