sroutier / eloquent-ldap
一个 Laravel 扩展包,首先尝试在内部数据库中登录用户,如果失败,则尝试配置的 LDAP/AD 服务器。
Requires
- php: >=7.0.0
- adldap2/adldap2: ~8.0
- illuminate/support: 5.5.*
Requires (Dev)
- phpunit/phpunit: ~6.0
README
一个 Laravel 扩展包,首先尝试在内部数据库中登录用户,如果失败,则尝试配置的 LDAP/AD 服务器。可选地,它将为首次登录的 LDAP 用户创建本地用户记录,并授予该用户访问具有与 LDAP 组匹配名称的本地组的权限。
版本兼容性
安装
通过 Composer
$ composer require sroutier/eloquent-ldap
声明提供者
在您的 ./config/app.php
文件的提供者数组中添加此声明
Sroutier\EloquentLDAP\Providers\EloquentLDAPServiceProvider::class,
发布资产
要发布资产、配置文件和迁移脚本,请运行以下命令
$ php artisan vendor:publish --provider="Sroutier\EloquentLDAP\Providers\EloquentLDAPServiceProvider"
这将发布一个配置文件和一个迁移文件。
迁移
迁移脚本将为 users
表添加一个新列 auth_type
,并为 groups
表添加一个列 resync_on_login
。您应该已经拥有这两个表,但如果您没有或者您想要为这些目的使用不同的表,提供的迁移脚本是创建这些表的示例,但已被注释。您需要检查迁移脚本并根据您的场景进行调整。
准备好后,使用以下命令运行迁移脚本
$ php artisan migrate
配置
建议通过在您 .env
文件中定义以下变量并调整那里的值来配置此包。有关每个设置的详细说明,请参阅您上面发布的配置文件。
您需要的配置将根据您希望验证的服务器类型而有所不同。下面是两种选项的示例配置部分:轻量级目录访问协议 (LDAP) 和微软活动目录 (MSAD)。
微软活动目录服务器。
以下是一个 .env
配置文件的部分,展示如何配置您的系统以访问微软活动目录服务器
eloquent-ldap.enabled=true
eloquent-ldap.debug=false
eloquent-ldap.server_type=MSAD
eloquent-ldap.create_accounts=true
eloquent-ldap.replicate_group_membership=true
eloquent-ldap.resync_on_login=true
eloquent-ldap.group_model=App\Models\Role
eloquent-ldap.label_internal=internal
eloquent-ldap.label_ldap=ldap
eloquent-ldap.account_suffix=@company.com
eloquent-ldap.base_dn=DC=department,DC=company,DC=com
eloquent-ldap.server=ldapsrv01.company.com
eloquent-ldap.port=389
eloquent-ldap.user_name=ldap_reader
eloquent-ldap.password=PaSsWoRd
eloquent-ldap.return_real_primary_group=true
eloquent-ldap.secured=false
eloquent-ldap.secured_port=636
eloquent-ldap.recursive_groups=true
eloquent-ldap.sso=false
eloquent-ldap.username_field=samaccountname
eloquent-ldap.email_field=userprincipalname
eloquent-ldap.first_name_field=givenname
eloquent-ldap.last_name_field=sn
eloquent-ldap.user_filter=(&(objectcategory=person)(samaccountname=%username))
轻量级目录访问协议服务器。
以下是一个 .env
配置文件的部分,展示如何配置您的系统以访问轻量级目录访问协议服务器
eloquent-ldap.enabled=true
eloquent-ldap.debug=false
eloquent-ldap.server_type=LDAP
eloquent-ldap.create_accounts=true
eloquent-ldap.replicate_group_membership=false
eloquent-ldap.resync_on_login=false
eloquent-ldap.group_model=App\Models\Role
eloquent-ldap.label_internal=internal
eloquent-ldap.label_ldap=ldap
eloquent-ldap.account_suffix=
eloquent-ldap.base_dn=dc=example,dc=com
eloquent-ldap.server=ldap.forumsys.com
eloquent-ldap.port=389
eloquent-ldap.user_name=cn=read-only-admin,dc=example,dc=com
eloquent-ldap.password=password
eloquent-ldap.return_real_primary_group=true
eloquent-ldap.secured=false
eloquent-ldap.secured_port=636
eloquent-ldap.recursive_groups=true
eloquent-ldap.sso=false
eloquent-ldap.username_field=uid
eloquent-ldap.email_field=mail
eloquent-ldap.first_name_field=
eloquent-ldap.last_name_field=sn
eloquent-ldap.user_filter=(&(objectclass=person)(uid=%username))
注意: 上述配置选项将允许您使用由 Forum Systems 托管的公开可用的 OpenLDAP 测试服务器连接和验证用户。
MSAD 与 LDAP 的区别
以下是一些根据所使用的服务器类型配置系统的不同之处,值得指出。
- eloquent-ldap.server_type: 可以是 LDAP 或 MSAD。让系统知道如何与认证服务器交互。
- eloquent-ldap.replicate_group_membership: 目前仅支持 MSAD 服务器。
- eloquent-ldap.resync_on_login: 目前仅支持 MSAD 服务器。
- eloquent-ldap.account_suffix
- LDAP:对于 LDAP 服务器应保持为空。
- MSAD:应包含用户电子邮件地址的静态部分。
- eloquent-ldap.user_name
- LDAP:应绑定用户的完整 DN。
- MSAD:仅是用于绑定的用户名。
- eloquent-ldap.return_real_primary_group
- LDAP:未使用。
- MSAD:修复Microsoft AD不遵循标准可能会产生额外的处理。
用法
用户表/模型必须包含以下列/属性:username
、first_name
、last_name
和email
。此包提供的迁移脚本包含创建此类表的示例,但已注释。
用户模型必须在fillable
数组中添加auth-type
属性,以允许在数据库中设置列。
此外,您的登录视图和AuthController
必须接受用户名和密码。如果您愿意,它们可以接受其他字段,例如电子邮件、安全令牌等。但是,当新用户第一次尝试登录时,由于他在本地数据库中找不到,包将需要用户名来对LDAP服务器进行身份验证。
示例
有关此包在活跃项目中使用的具体示例,请参阅sroutier/laravel-5.1-enterprise-starter-kit。请注意,在该项目中,此包与Zizaco/entrust结合使用以提供基于角色的授权,因此没有组模型,而是角色模型。
变更日志
有关最近更改的更多信息,请参阅CHANGELOG。
贡献
有关详细信息,请参阅CONTRIBUTING。
安全
如果您发现任何安全相关的问题,请通过电子邮件sroutier@gmail.com联系,而不是使用问题跟踪器。
鸣谢
许可证
GNU通用公共许可证版本3(GPLv3)。有关更多信息,请参阅许可证文件。