2011-06-15 108 views
3

我正在使用Django 1.3和Django Auth Ldap 1.0.6。我試圖讓在LDAP服務器(管理員)上具有特殊狀態的用戶在我的Django應用程序中具有相同的狀態。使用Django身份驗證將LDAP用戶映射到Django用戶Ldap

這是我的當前設置:

AUTH_LDAP_SERVER_URI = 'ldap://path.to.server' 

AUTH_LDAP_BIND_DN = '' 
AUTH_LDAP_BIND_PASSWORD = '' 
AUTH_LDAP_USER_DN_TEMPLATE = 'uid=%(user)s,cn=users,dc=server,dc=location,dc=lan' 
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
          'cn=groups,dc=server,dc=location,dc=lan', 
          ldap.SCOPE_SUBTREE, 
          '(objectClass=groupOfNames)', 
) 
AUTH_LDAP_USER_ATTR_MAP = { 
    'first_name': 'givenName', 
    'last_name': 'sn', 
} 
AUTH_LDAP_USER_FLAGS_BY_GROUP = { 
    #'is_active': 'cn=groups,dc=server,dc=location,dc=lan', 
    #'is_staff': 'cn=admin,cn=groups,dc=server,dc=location,dc=lan', 
    #'is_superuser': 'cn=admin,cn=groups,dc=server,dc=location,dc=lan', 
} 
AUTH_LDAP_ALWAYS_UPDATE_USER = True 
AUTH_LDAP_MIRROR_GROUPS = True 
AUTH_LDAP_FIND_GROUPS_PERMS = True 

權限不更新。如果我取消註釋FLAGS_BY_GROUP中的值,則無法再進行身份驗證(錯誤消息表示用戶和密碼不匹配)。我嘗試了沒有最後的設置與相同的結果。

任何想法,高度讚賞。

回答

1

在psagers的提示幫助下,我設法找到了我的問題的答案。 首先,我使用Open Directory,所以我需要使用AUTH_LDAP_GROUP_TYPE = PosixGroupType(name_attr ='cn')而不是GroupOfNamesType()。 其次,將'is_active'標誌映射到整個'groups'容器是沒有意義的,因爲當我使用它時我無法登錄,所以我將它取出。

3

如果你設置了AUTH_LDAP_GROUP_SEARCH,你還需要設置AUTH_LDAP_GROUP_TYPE。由於您顯然使用groupOfNames進行分組,因此您需要AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()

其他一切看起來都不錯,雖然它不太可能同時需要AUTH_LDAP_MIRROR_GROUPSAUTH_LDAP_FIND_GROUPS_PERMS。這可能不會傷害任何東西,但這些都是替代品。

一般來說,logging是你這種情況下的朋友。