簡體   English   中英

Zend-使用LDAP的Apache中的基本身份驗證

[英]Zend - Basic auth in Apache using LDAP

我是Zend和LDAP的新手,所以我真正的堆棧溢出...我所擁有的:

  • LDAP服務器
  • Apache服務器
  • Zend應用

我需要的:

  • 在未授權用戶的情況下,在應用程序的任何頁面上顯示Apache的basic-auth提示
  • 如果LDAP服務器上的登錄名和密碼正確,則重定向到index-controller。

我已經閱讀了大量有關Zend_Auth,authnz_ldap_module等的手冊,但無法解決給定的任務。 任何幫助-示例,解決方案,鏈接-均將不勝感激!

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

將其添加到目錄指令中,這將滿足您對ldap auth的需求。 但是您仍然需要弄清楚如何將剛到來的訪問者重定向到索引(可能是cookie)。

我最近完成了整個ACL流程,並對結果感到滿意。 這是我實現的:

  1. 擴展Zend_ACL並使用其構造函數添加您的角色(包括繼承關系)。

  2. 創建一個在啟動程序中加載的動作幫助器。 (您需要盡早加載它,以便可以使用其鈎子,例如preDispatch )。

  3. 編輯要保護的每個控制器的init()並調用新的ACL幫助器,傳入要應用到該控制器的規則,例如: allow('member', 'edit);

實際的工作由動作助手完成。 它具有四個功能:

  • 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的基本auth-prompt是默認的挑戰嗎?否則,可能會增加其他復雜性)。

我改編自Rob Allen(Zend Framework in Action)和其他各種來源的書。 請注意,某些Zend專業人員建議基於模型的ACL(而不是控制器操作)。 我會對此深思熟慮。

上述方法的一個特別方便的方面是,很容易持續維護ACL規則。 在使用特定控制器時,您可以在init()設置其ACL規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM