dyrynda/laravel-ldap

利用 Laravel 的中间件确保您的 LDAP 认证用户保持状态。

4.0.0 2020-03-11 22:36 UTC

This package is auto-updated.

Last update: 2024-09-12 08:49:31 UTC


README

优秀的 Adldap2-Laravel 包使得将 Laravel 应用程序与 LDAP 服务器集成以验证用户变得非常简单,但这些用户可以由应用程序外部管理,因此如果他们已经登录,则无法始终管理他们的访问。

此包不仅允许您定义用户必须属于的组以进行认证,而且还将确保这些组在整个用户认证会话期间继续存在,而不仅仅是认证时(即登录时)。

安装

composer require dyrynda/laravel-ldap

安装包后,发布配置文件

php artisan vendor:publish --tag="laravel-ldap"

配置

您可能需要更改的三个键是 allowed_groupsusernamepassword_expiry_threshold

  • allowed_groups 包含用户必须具有的允许组的区别名称,才能进行认证。
  • username 是在 users 表中可以通过应用程序用户查找的数据库字段,并且将与用于与应用程序进行认证的用户名匹配。
  • password_expiry_threshold 用于确定密码上次更改的时间,相对于认证用户的(缓存)数据。

用法

为了使用 allowed_groups 键将用户认证限制到您的应用程序,请将 GroupAccessScope 添加到 adldap_auth 配置文件的 scopes 键。用户只有在其是 allowed_groups 数组中定义的每个组的成员时才能进行认证。

此作用域将确保用户只能在他们是给定组的成员时登录,但不会保护您的应用程序免受目录服务器中访问被撤销的用户访问。

为了解决这个问题,您可以将以下内容添加到 app/Http/Kernel.php 文件的 $routeMiddleware 属性中。

'ldap' => \Dyrynda\Ldap\Http\Middleware\LdapMiddleware::class

然后,可以将此中间件应用于您的路由,以确保以下内容

  • LDAP 用户存在于目录中,并且继续是 allowed_groups 的成员
  • 认证用户最近没有更改密码
  • 认证用户的密码在配置的时间段内不会过期,默认为 5 天

如果这些条件中的任何一个评估为假,则用户将被注销并重新登录到您的应用程序。

更新密码

如果您希望根据密码更新将用户注销,则必须缓存标记上次更新密码时间的戳(在登录时)。当 LDAP 中的值比应用程序缓存的值新时,用户将被注销。

如果配置的 password_expiration_field 属性不在您的 User 模型上,则将跳过此检查。

您需要配置修改 adldap_auth.php 配置文件以从 LDAP 同步 pwdlastset 值。

'sync_attributes' => [
    'password_updated_at' => 'pwdlastset',
],

请确保您已配置相应的数据库字段。

Schema::table('users', function (Blueprint $table) {
    $table->unsignedBigInteger('password_updated_at')->nullable()->default(null);
});

测试

默认情况下,测试中启用了 ldap,您可以在配置 laravel_ldap.php 中切换。

'disable_while_testing' => true,

最后,更新 laravel_ldap.php 配置文件中的 password_expiration_field(如果未使用默认的 password_updated_at)。

支持

如果您在这个存储库中遇到一般性问题,请随时在Twitter上联系我。

如果您认为您发现了一个问题,请使用GitHub问题跟踪器报告它,或者更好的方法是分叉存储库并提交一个pull请求。

如果您在使用这个存储库,我很想听听您的想法。谢谢!