關於Django項目接入LDAP用戶認證

#簡介 如下內容主要介紹關於Django系統的後臺admin管理頁面中如何採用LDAP用戶認證,並實現登錄的辦法django

#用戶認證接入前提ui

  1. 關於Django接入LDAP。首先,你得有一個LDAP系統(http://eric_ldap.oschina.com)。
  2. 在LDAP系統中建立對應的登錄用戶,並設置登錄密碼
  3. 在LDAP系統中建立對應的登錄用戶組(eric_admin),把須要登錄的帳號加入到組裏面

#Django配置 編輯系統配置文件(setting),直接添加在配置最後便可code

import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType, GroupOfUniqueNamesType
# Baseline configuration.

AUTH_LDAP_START_TLS
AUTH_LDAP_SERVER_URI = "ldap://eric_ldap.oschina.com:389"  #配置ldap的服務地址

# 指定使用ldap做爲認證系統
AUTH_LDAP_BIND_DN = "uid=admin,cn=users,cn=accounts,dc=oschina,dc=com"
AUTH_LDAP_BIND_PASSWORD = "123qwe"

# ldap的用戶搜索的路徑,能夠使用LDAP的客戶端查看用戶的搜索路徑
# 我這邊使用的ldapBorwser查看的ldap帳號結構和信息
AUTH_LDAP_USER_SEARCH = LDAPSearch("cn=users,cn=accounts,dc=oschina,dc=com",
    ldap.SCOPE_SUBTREE, "(uid=%(user)s)")

# ldap用戶組的搜索路徑
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("cn=groups,cn=accounts,dc=oschina,dc=com",
    ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)"
)

AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="cn")

# ldap中對於的用戶屬性同步到django用戶帳號的屬性對應列
AUTH_LDAP_USER_ATTR_MAP = {  
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail"
} 

AUTH_LDAP_USER_FLAGS_BY_GROUP = {
#定義用戶能夠登陸admin後臺的組是哪一個,前面ldap中已經建立了這個組,並加入了指定用戶
# 默認建立的django用戶是不能登陸admin後臺的
    "is_staff": "cn=eric_admin,cn=groups,cn=accounts,dc=oschina,dc=com", 
#定義用戶能夠徹底操做admin後臺的組是哪一個,前面ldap中已經建立了這個組,並加入了指定用戶
    "is_superuser": "cn=eric_admin,cn=groups,cn=accounts,dc=oschina,dc=com" 
}

# 同步ldap的用戶信息到django中
# 若是第一次登陸django中沒有此用戶,ldap中有,能夠自動在django中將用戶複製過去,並指定權限
AUTH_LDAP_ALWAYS_UPDATE_USER = True

# 設定django第一採用ldap權限認證,若是ldap中沒有用戶,再使用django中的用戶認證
AUTHENTICATION_BACKENDS = (
    'django_auth_ldap.backend.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
)

#效果 無需其餘操做,重啓django系統,而後使用ldap的用戶登錄便可。get

若是django自己無此用戶,能夠經過ldap帳號正常登錄,並權限賦予成功,就OK了同步

相關文章
相關標籤/搜索