學(xué)習(xí)Django做了個(gè)小網(wǎng)站,但是如果只用在公司內(nèi)部的話,特此又要員工注冊網(wǎng)站帳號,這個(gè)是個(gè)槽糕的問題。
最好的方式就是直接使用員工的計(jì)算機(jī)帳號來登錄,那樣就不用為又要為記住個(gè)新帳號名密碼而苦惱了。
恰好公司有LDAP服務(wù)器,并且存有員工賬號信息。這樣就可以通過Django的LDAP插件,來完成員工帳號的登錄驗(yàn)證功能。
首先需要安裝以下模塊:
python-ldap 2.4.12
https://pypi.python.org/pypi/python-ldap/2.4.12
安裝完成后,django項(xiàng)目中settings.py的ldap配置如下:
1 #LDAP configuration
2 import ldap
3 from django_auth_ldap.config import LDAPSearch
4 AUTHENTICATION_BACKENDS = (
5 'django_auth_ldap.backend.LDAPBackend',
6 'django.contrib.auth.backends.ModelBackend',
7 )
8
9 AUTH_LDAP_SERVER_URI = 'ldap://SERVER_IP'
10 AUTH_LDAP_BIND_DN = 'CN=ACCOUNT_NAME,OU=Accounts,DC=ldap,DC=example,DC=com'
11 AUTH_LDAP_BIND_PASSWORD = "PASSWORD"
12 AUTH_LDAP_USER_SEARCH = LDAPSearch("OU=Accounts,DC=ldap,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(&(objectClass=person)(sAMAccountName=%(user)s))")
13
14 AUTH_LDAP_USER_ATTR_MAP = {
15 "first_name": "givenName",
16 "last_name": "sn",
17 "email": "mail"
18 }
工作流程:
登錄時(shí),在默認(rèn)的django數(shù)據(jù)庫帳號驗(yàn)證之前,會(huì)先到LDAP服務(wù)器上去驗(yàn)證。
輸入的登錄帳號到LDAP服務(wù)器驗(yàn)證之前,會(huì)先用配置文件中的綁定DN、密碼去驗(yàn)證,驗(yàn)證通過才能繼續(xù)用輸入的帳號密碼去LDAP服務(wù)器驗(yàn)證。
若LDAP驗(yàn)證通過,會(huì)檢查django數(shù)據(jù)庫中是否已存在該帳號,若不存在,則會(huì)根據(jù)LDAP驗(yàn)證通過后獲取的用戶信息,來創(chuàng)建django數(shù)據(jù)庫的用戶賬號。帳號名和輸入的一樣,密碼則會(huì)設(shè)為一個(gè)無效的密碼(看了下源碼是"!",無法合法哈希編碼),因?yàn)樵搸ぬ柮艽a驗(yàn)證是從LDAP上進(jìn)行,所以django中的密碼不會(huì)被使用到。除了默認(rèn)的用戶姓名、郵件等信息,若要把Group信息也同步過來的話需要進(jìn)行相應(yīng)的配置。
若LDAP驗(yàn)證失敗,則會(huì)使用Django數(shù)據(jù)庫的默認(rèn)登錄驗(yàn)證。
PS: LDAP快速入門
http://www.cnblogs.com/obpm/archive/2010/08/28/1811065.html