dyrynda / laravel-ldap
利用 Laravel 的中间件确保您的 LDAP 认证用户保持状态。
Requires
- adldap2/adldap2-laravel: ^6.0
- illuminate/support: ^7.0
README
优秀的 Adldap2-Laravel 包使得将 Laravel 应用程序与 LDAP 服务器集成以验证用户变得非常简单,但这些用户可以由应用程序外部管理,因此如果他们已经登录,则无法始终管理他们的访问。
此包不仅允许您定义用户必须属于的组以进行认证,而且还将确保这些组在整个用户认证会话期间继续存在,而不仅仅是认证时(即登录时)。
安装
composer require dyrynda/laravel-ldap
安装包后,发布配置文件
php artisan vendor:publish --tag="laravel-ldap"
配置
您可能需要更改的三个键是 allowed_groups
、username
和 password_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请求。
如果您在使用这个存储库,我很想听听您的想法。谢谢!