Zend - 使用LDAP在Apache中进行基本身份验证

时间:2011-04-08 17:28:41

标签: apache zend-framework ldap authentication

我是Zend和LDAP的新手,所以我有真正的堆栈溢出... 我有什么:

  • LDAP服务器
  • Apache的服务器
  • Zend的应用

我需要什么:

  • 在用户的任何应用页面上 没有授权显示Apache的 basic-auth prompt
  • 如果登录并且 然后在LDAP服务器上密码正确 重定向到index-controller。

我已经阅读了大量关于Zend_Auth的手册,关于authnz_ldap_module等但无法解决给定的任务。 任何帮助 - 例子,解决方案,链接 - 都将受到高度赞赏!

2 个答案:

答案 0 :(得分:1)

AuthType basic                                                                                           
AuthName "Secure Login"                                                                           
AuthBasicProvider ldap                                                                            
AuthLDAPURL "ldaps://ldap.example.com/ou=People,dc=exmaple,dc=com?uid?sub".   

将它添加到您的目录指令中,这将满足您对ldap auth的需求。但你仍然需要弄清楚如何将新来的访问者重定向到索引,可能是cookie。

答案 1 :(得分:0)

我最近完成了整个ACL流程,并对结果感到满意。这是我实施的内容:

  1. 扩展Zend_ACL并使用其构造函数添加角色(包括继承关系)。

  2. 创建一个在引导程序中加载的动作助手。 (你需要尽早加载它,以便你可以利用它的钩子,如preDispatch)。

  3. 编辑要保护的每个控制器的init()并调用新的ACL帮助程序,传入要应用于此控制器的规则,例如:allow('member', 'edit);

  4. 真正的工作是由动作助手完成的。它有四个功能:

    • init() - 实例化新的ACL类,然后添加一个反映当前控制器名称的新资源,即。 $this->_resource = $this->getRequest()->getControllerName())

    • preDispatch() - 使用Zend_Auth获取当前用户类型(或指定用户未登录的默认guest虚拟机)。检查是否允许使用ACL进行请求,即$this->_acl->isAllowed($currentRole, $resource, $action)
      注意请求的操作成为ACL权限。

    • allow() - 这只是代理到ACL对象上的allow()函数。它由控制器构造函数调用以在ACL中设置规则。

    • deny() - 至于允许。

    因此,在运行时,一系列事件如下:

    • 动作助手在引导程序中加载。这a)实例化自定义ACL对象,该对象设置自己的角色,然后b)将当前控制器名称添加为资源。

    • 运行控制器init()。它调用助手的allow()deny()方法来设置规则。

    • 运行帮助程序preDispatch(),如果!isAllowed(),则重定向用户。

    我正在反对数据库,但如果您使用LDAP,则会采用相同的逻辑。 (在这种情况下,Apache的基本身份验证提示是默认挑战吗?如果没有,可能会增加额外的复杂性。)

    我从Rob Allen(Zend Framework in Action)以及其他各种来源的书中对此进行了改编。请注意,一些Zend专业人员建议使用基于模型的ACL(而不是控制器操作)。我会在赛道上给出一些想法。

    上述方法的一个特别方便的方面是,持续维护ACL规则非常容易。在使用特定控制器时,您可以在ACL中设置init()规则。