marks12/zfcuser-ldap

Zend Framework 2 ZfcUser LDAP 认证。这是一个非官方版本。请使用 Nitecon/zfcuser-ldap

1.1.3 2014-09-01 08:25 UTC

This package is not auto-updated.

Last update: 2024-09-24 07:17:06 UTC


README

!注意 - 这是一个非官方版本,请使用 Nitecon/zfcuser-ldap Travis 添加

Build Status Latest Stable Version Coverage Status

Zend Framework ZfcUser 扩展,提供 LDAP 认证

特性

  • 提供 LDAP 认证的适配器链。
  • 允许通过用户名和电子邮件地址登录
  • 在配置的 LDAP 服务器之间提供自动故障转移
  • 为 BjyAuthorize 提供 ID 提供者

待办事项/进行中

  • 添加在 ldap 中注册用户的能力
  • 允许在 ldap 中重置密码
  • 为 ZfcRbac 提供 ID 提供者

重建通知

如果您不想测试 WIP,请确保使用以下 composer 设置中的当前发布版本:1.1.0。虽然我会尽量保持 master 分支尽可能稳定,但仍然有可能破坏您的东西。

由于 ZfcRbac 需要在用户实体中实现 getRoles,因此我将为此适配 BjyAuthorize。顺便说一下,角色可能不会被插入到数据库中,因为它们可能会更改,而将它们存储在会话中似乎更有意义。

WIP

目前 master 分支是功能性的,但没有文档。我将尽力为 master 分支添加文档,并在接下来的一个星期左右添加一个新的版本。然而,工作生活并不总是仁慈的,但我将尽快完成。

整个模块是从头开始重建的。我已经尽力保持向后兼容性,但是为了获得一些修正,我不得不破坏当前的发布版本。

什么被破坏了?您现在需要在 zfcuser 用户表中有一个名为 roles 的列。我目前将其设置为 blob,因为我的 ldap 用户不适合文本或长文本。除此之外,还有一些新功能。

在模块下(在您的 vendor 目录中)您将找到一个新的配置文件 zfcuserldap.global.php.dist。您需要将此文件复制并重命名为 config/autoload/zfcuser.global.php,或者将其添加到您自己的全局文件中。该文件包含模块的新配置设置,它还包括一个名为:auto_insertion 的新功能。如果启用自动插入(默认),则在触发认证并成功后,用户将被自动添加到您的 zfcuser 用户表中。如果您选择禁用此功能,则仍然可以使用模块,但是您需要首先在您的数据库表中创建用户。这提供了之前不可用且仅通过 bjyauthorize 角色可用的额外限制。

另一个相当大的变化是,模块现在具有一个合适的链式认证适配器和可调整的实体。以前您必须设置

'auth_adapters' => array( 
    100 => 'ZfcUserLdap\Authentication\Adapter\Ldap' ),

现在您可以更有效地拥有类似

'auth_adapters' => array( 
    110 => 'ZfcUserLdap\Authentication\Adapter\LdapAuth', 
    100 => 'ZfcUser\Authentication\Adapter\Db' ),

请记住,密码不会存储在数据库中,因为我倾向于允许这种情况发生,所以如果您禁用 zfcuserldap,您的用户仍然存在,但是您需要重置密码。

由于现在它运行在具有插入操作的数据库上,这也意味着您必须实际上指定前面提到的用户实体!默认情况下,您可以设置以下 zfcuser 配置

    'user_entity_class' => 'ZfcUserLdap\Entity\User',

您始终可以覆盖实体,但请记住,您还需要在实体中包含 rawLdapObj 属性及其 getter/setter,以及相关的表列 raw_ldap_obj

BjyAuthorize不受此更改的影响,您应该能够像以前一样使用身份提供者。

设置

在您的 module/application.config.php 中添加以下模块:

	'DoctrineModule',
	'DoctrineORMModule',
	'BjyProfiler',
	'ZfcBase',
	'ZfcUser',
	'BjyAuthorize',
	'ZfcUserLdap',

以下步骤是使此模块正常工作的必要步骤

  1. 运行 php composer.phar require nitecon/zfcuser-ldap:1.1.0

  2. ZfcUserLdap 添加到启用模块列表(需要激活 ZfcUser)

  3. 根据以下链接将 Zend Framework LDAP 配置添加到您的 autoload 中,键为 'ldap':http://framework.zend.com/manual/2.1/en/modules/zend.ldap.introduction.html

    以下是一个配置示例,用于 configs/autoload/global.php 请确保您在此文件中不包含密码,我仅将其包含在此处以供说明

    array(
    'ldap' => array(
    'server1' => array(
    'host'              => 's0.foo.net',
    'username'          => 'CN=user1,DC=foo,DC=net',
    'password'          => 'pass1',
    'bindRequiresDn'    => true,
    'accountDomainName' => 'foo.net',
    'baseDn'            => 'OU=Sales,DC=foo,DC=net',
    ),
    'server2' => array(
    'host'              => 's0.foo2.net',
    'username'          => 'CN=user1,DC=foo,DC=net',
    'password'          => 'pass1',
    'bindRequiresDn'    => true,
    'accountDomainName' => 'foo.net',
    'baseDn'            => 'OU=Sales,DC=foo,DC=net',
    ),
    )
    ),
    

BjyAuthorize 设置

要启用 ZfcUserLdap 模块上的 BjyAuthorize,您只需将以下内容添加到您的应用的 module.config.php 中

return array(
 // Your other stuff
'bjyauthorize' => array(
        // Using the authentication identity provider, which basically reads the roles from the auth service's identity
        'identity_provider' => 'ZfcUserLdap\Provider\Identity\LdapIdentityProvider',
        'ldap_role_key' => 'objectclass',
        'role_providers' => array(
            /* here, 'guest' and 'user are defined as top-level roles, with
             * 'posixAccount' inheriting from user
             */
            'BjyAuthorize\Provider\Role\Config' => array(
                'guest' => array(),
                'user' => array('children' => array(
                        'person' => array(),
                        'posixAccount' => array(),
                    )),
            ),
        ),
        'guards' => array(
            'BjyAuthorize\Guard\Route' => array(
                array('route' => 'zfcuser', 'roles' => array('posixAccount')),
                array('route' => 'zfcuser/logout', 'roles' => array('posixAccount')),
                array('route' => 'zfcuser/login', 'roles' => array('guest')),
                array('route' => 'zfcuser/register', 'roles' => array('guest')),
                // Below is the default index action used by the ZendSkeletonApplication
                array('route' => 'home', 'roles' => array('guest', 'person')),
            ),
        )
    ),
    // More of your other stuff
    );

大多数项目应基于 BjyAuthorize 文档熟悉,但我将概述 ZfcUserLdap 正确运行的临界部分。

第一个重要部分是 'identity_provider' => 'ZfcUserLdap\Provider\Identity\LdapIdentityProvider',

下一部分是: 'ldap_role_key' => 'objectclass', 这直接映射到搜索返回的 ldap 对象。如果您想查看基于您的 ldap 服务器实际的对象,请查看 data/logs/ldap.log。我已选择 objectclass 作为用于角色的键,但您可以使用任何顶级键,一些 ldap 团队提供类似 mycompanyrole 的管理角色键,其中包含用户当前拥有的实际角色的子键,在这种情况下,请将 ldap_role_key 设置为 mycompanyrole

最后部分是 BjyAuthorize 的 role_providers 键,因为 ldap 用户是动态的,并且并非所有用户始终具有相同的角色,我们使用 BjyAuthorize\Provider\Role\Config 角色提供者定义基线。访客和用户角色是必需的,因为 guest 表示未登录用户,而 user 表示已成功登录的用户,这样您就有能力为 ldap 上的每个人提供特定集的访问权限,并使用提供的角色限制对其他部分的访问。

现在我们来谈谈在 user 子节点中设置的基线。子键应 始终 映射到您选择的 ldap_role_key 元素中存在的现有数组键。由于 objectclass 是合理的 ldap 默认值,同样还有 personposixAccount,我决定使用它们作为基线。请记住,您可以在本节中添加任何角色,甚至让它们继承,唯一的限制是当用户登录时,IdentityProvider 将检查所选的基线角色,并将自动取消设置用户在键下具有的任何附加角色。这样做的原因是因为 BjyAuthorize 如果用户有它不知道的角色,就会变得疯狂。

祝您玩得开心,如果您有问题,请告诉我。

附加信息

请注意,根据上述配置示例,它显示了 2 个服务器被使用,这将允许在其中一个服务器宕机时自动故障转移。这不是必需的。您只需指定一个服务器,因此可以删除 'server2' 数组。

当前应用程序还将所有 LDAP 相关查询记录到 data/logs/ldap.log。如果您没有 data 目录,请创建一个,应用程序将自动尝试创建它。但是,如果它无法创建文件夹,则将出现错误。这将在未来更改,以允许用户指定日志位置,并完全禁用日志记录。

应用程序配置

请确保在 application.config.php 中启用 ZfcUser 和 ZfcUserLdap,如下所示

  array(
    'ZfcUser',
    'ZfcUserLdap',
    /* It's important to load ZfcUser before ZfcUserLdap as ZfcUserLdap is an addon to ZfcUser */
  );

ZfcUser 配置

对于初始版本,请确保在您的 zfcuser 配置中设置以下设置

    array(
        'enable_registration' => false,
        'enable_username' => true,
        'auth_adapters' => array( 100 => 'ZfcUserLdap\Authentication\Adapter\Ldap' ),
        'auth_identity_fields' => array( 'username','email' ),
    ),

总结

在上面的配置中,如果愿意,可以将 auth_identity_fields 仅设置为电子邮件。然而,建议允许 LDAP 用户使用他们的 ldap uid 登录。但在此处应关闭 enable_registration,因为它会在用户尝试注册且无法在 LDAP 中创建实体时引起问题。

在模块中还需要进行一些错误处理,以及根据 zfcuser 模块的功能进行修改的能力。然而,目前这已被禁用,您将无法 更改 密码。

享受使用过程,如果您发现任何错误或问题,请为此模块添加 pull requests。