我正在开发一个APP,我想在我们的LDAP中使用这个APP 并按组过滤用户。我在APACHE中有这段代码:
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。
任何人都可以帮助我?
提前多多谢谢
答案 0 :(得分:0)
我自己一直在努力解决这个问题。我认为解决方案是通过执行一些LDAP查询从LDAP导入组。
这种方法的不好之处在于它要求您(1)在使用FIRST登录时将组插入到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如何组织组 - 我将编写代码以在一周或两周内提取组): import ldap 从ldap.filter导入filter_format为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组没有太大变化,您可以创建一个执行以下操作的脚本:
然后根据需要运行脚本。我喜欢在运行这样的ETL脚本时删除内容,因为这样你就可以重新开始,不会复制内容或在事情已经存在时遇到错误并违反数据库约束。