[英]Zend - Basic auth in Apache using LDAP
我是Zend和LDAP的新手,所以我真正的堆棧溢出...我所擁有的:
我需要的:
我已經閱讀了大量有關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流程,並對結果感到滿意。 這是我實現的:
擴展Zend_ACL
並使用其構造函數添加您的角色(包括繼承關系)。
創建一個在啟動程序中加載的動作幫助器。 (您需要盡早加載它,以便可以使用其鈎子,例如preDispatch
)。
編輯要保護的每個控制器的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.