2011-07-12 52 views
0

我正在開發一個APP,我想用我們的LDAP 這個APP,並按組過濾用戶。我在APACHE有這樣的代碼:Ldap和用戶組(要求ldap組)

  AuthLDAPURL ldap://localhost/ou=users,dc=domain,dc=com?uid 
      AuthLDAPGroupAttribute memberUid 
      AuthLDAPGroupAttributeIsDN off 
      AuthzLDAPAuthoritative on 
      Require ldap-group cn=developer,cn=testers,cn=groups,dc=domain,dc=com 

它工作正常。只有來自列表開發人員和測試人員的人員可以在此區域內獲得 。我試圖做的web2py一樣,但我不能 從組

我有這樣的代碼做一個過濾器,無組好的工作:

auth.settings.login_methods=[ldap_auth(mode='uid_r',server='localhost',port='389', 
base_dn='ou=users,dc=domain,dc=com', filterstr='objectClass=*')] 

我不知道如何使用:在web2py中需要ldap-group。

任何人都可以幫到我嗎?

在提前許多感謝

+1

這裏有一個很好的切片: http://www.web2pyslices.com/slice/show/1476/ldap-auth-with-allowed-groups-and-manage-groups。 我did'nttest但 –

回答

0

我一直是這樣摔跤自己。我認爲解決方案是通過執行一些LDAP查詢從LDAP中導入組。 (1)當使用FIRST登錄時,它需要(1)將組插入到web2py auth_group表中。(2)如果組傾向於更改,則需要對組進行維護。這可以使用cron作業或手動完成。

您能發現如果用戶之前已登錄這樣的:

query = (db.auth_event.description.like('%Logged-in%'))&(db.auth_event.user_id==auth.user.id) 

if db(query).count() == 1: 
    # Query LDAP for group membership, update auth_group table 

下面是一個LDAP查詢的一些示例代碼 - 這是一個基於下來僅僅查找用戶信息(我不知道LDAP如何組織團體 - 我會寫代碼以提取組一兩個星期):從ldap.filter進口filter_format 導入LDAP 爲ff

ldap_attrs = ['sn','givenName','telephoneNumber', 'mail' ] 

FILTER_TPL = '(&%s(objectclass=i3person))' 
sch = ff('(%s=%s)', ('uid', auth.user.username)) 

ldap_filter = FILTER_TPL % sch 
con = ldap.initialize("ldap://YOUR-LDAP-SERVER") 
dn= "YOUR-DN-FOR-USERS/GROUPS" 
mode = "uid" 
port = 389 
ldap_results = con.search_s(dn, ldap.SCOPE_SUBTREE, ldap_filter, ldap_attrs) 

dn, res = ldap_results[0] 

你可以得到更多的信息Python的LDAP這裏: http://www.python-ldap.org/docs.shtml

(這其中有與查詢組代碼示例) http://www.ibm.com/developerworks/aix/library/au-ldap_crud/

另外,不要忘記使用filter_format(進口爲FF以上),它會逃避你的LDAP查詢,防止LDAP注入如有用戶輸入被允許進入代碼。出於我的目的,我正在製作一個可公開訪問的表單,爲人們搜索LDAP條目。

以下是將ActiveDirectory組鏡像到LDAP組中的文章。我張貼這是因爲雖然它的對面,它的一些仍然是有用的,特別是從LDAP獲得團體因爲這是同不論讀或寫的過濾器,並使用Python-LDAP: http://oxpedia.org/wiki/index.php?title=Mirorring_Active_Directory_user_acconts_in_LDAP

如果您的ldap組不會有太大變化,您可以創建一個腳本來執行以下操作:

  • 刪除web2py帳戶的所有組成員(新開始)。
  • 對於每個帳戶,查詢組ldap
    • 對於每個查詢,提取所有組。
    • 複製羣體納入auth_groups如果不存在
    • 添加成員組(auth_membership什麼?)

然後,只需在需要的基礎上運行該腳本。在運行這樣的ETL腳本時,我喜歡刪除東西,因爲那樣當事情已經存在並違反數據庫約束時,您就會全新開始並且不會重複或發生錯誤。

+0

首先非常感謝的, 現在,我已經創建了我的數據庫裏面的組結構,所以: 1 - 我在LDAP登錄 2-(如果是)我檢查組在我的數據庫中 –