免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

如何在django中使用LDAP驗(yàn)證-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)如何在django中使用LDAP驗(yàn)證,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),城步企業(yè)網(wǎng)站建設(shè),城步品牌網(wǎng)站建設(shè),網(wǎng)站定制,城步網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,城步網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

1.安裝Python-LDAP(python_ldap-2.4.25-cp27-none-win_amd64.whl)pip install python_ldap-2.4.25-cp27-none-win_amd64.whl

2.安裝django-auth-ldap(django-auth-ldap-1.2.8.tar.gz)

安裝成功后運(yùn)行命令,運(yùn)行成功表示安裝成功

from django_auth_ldap.config import LDAPSearch, LDAPSearchUnion, GroupOfNamesType

3.配置settings.py,增加如下:

# -*- coding: UTF-8 -*-

import ldap
from django_auth_ldap.config import LDAPSearch #導(dǎo)入LDAP model

AUTHENTICATION_BACKENDS = ( 
  'django_auth_ldap.backend.LDAPBackend', #配置為先使用LDAP認(rèn)證,如通過認(rèn)證則不再使用后面的認(rèn)證方式
  'django.contrib.auth.backends.ModelBackend', 
) 

AUTH_LDAP_SERVER_URI = 'ldap://192.168.200.20:389'
AUTH_LDAP_BIND_DN = 'CN=test01,OU=ServerAdmin,DC=uu,DC=yyy,DC=com'
AUTH_LDAP_BIND_PASSWORD = '123456' 
OU = unicode('OU=中文名,DC=uu,DC=yyy,DC=com', 'utf8') #限制哪個(gè)OU中的用戶可以進(jìn)行AD認(rèn)證。如果OU中包含有中文字符,則需要這樣寫,否則會(huì)出現(xiàn)ascii無法識(shí)別的報(bào)錯(cuò)(UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position)
# OU0 = 'OU=ServerAdmin,DC=uxin,DC=youxinpai,DC=com'
# OU = unicode('OU=優(yōu),DC=uxin,DC=youxinpai,DC=com', 'utf8')
# OU1 = u'OU=優(yōu),DC=uxin,DC=youxinpai,DC=com'
# OU2 = u'OU=\u4f18,DC=uxin,DC=youxinpai,DC=com'
# OU == OU1 == OU2 #返回True
#檢索單個(gè)OU
AUTH_LDAP_USER_SEARCH = LDAPSearch(OU, ldap.SCOPE_SUBTREE, "(&(objectClass=person)(sAMAccountName=%(user)s))")

# 檢索多個(gè)OU:
# AUTH_LDAP_USER_SEARCH = LDAPSearchUnion( 
#   LDAPSearch("ou=user,ou=ou1,ou=ou,dc=cn,dc=com",ldap.SCOPE_SUBTREE, "(&(objectClass=user)(sAMAccountName=%(user)s))"), 
#   LDAPSearch("ou=user,ou=ou2,ou=ou,dc=cn,dc=com",ldap.SCOPE_SUBTREE, "(&(objectClass=user)(sAMAccountName=%(user)s))"), 
# ) 

#將賬號(hào)的姓、名、郵件地址保存到django的auth_user表中,在admin后臺(tái)可以看到
AUTH_LDAP_USER_ATTR_MAP = { 
  "first_name": "givenName",
  "last_name": "sn",
  "email": "mail"
}

同步用戶組信息:

當(dāng)用戶登錄后,如果用戶屬于某個(gè)組,則會(huì)將該組同步到auth_group表中,之后在admin后臺(tái)可以對(duì)該組進(jìn)行權(quán)限設(shè)置,之后同屬于該組的用戶在登錄后則具有相應(yīng)的權(quán)限。

當(dāng)一個(gè)用戶不再屬于某個(gè)組,該組也不會(huì)被自動(dòng)刪掉,在admin后臺(tái)手工刪掉即可。

from django_auth_ldap.config import LDAPSearch, LDAPSearchUnion, GroupOfNamesType 

AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="cn") #返回的組的類型,并用來判斷用戶與組的從屬關(guān)系

OUg = unicode('OU=安全組,DC=uu,DC=yyy,DC=com', 'utf8')
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(OUg,ldap.SCOPE_SUBTREE, "(objectClass=group)" ) #搜索某個(gè)OU下組信息
 
AUTH_LDAP_MIRROR_GROUPS = True #導(dǎo)入用戶的組信息,在用戶登錄的時(shí)候把用戶的域組關(guān)系同步過來。每次用戶登錄時(shí),都會(huì)把用戶的組關(guān)系刪除,重新從ldap中進(jìn)行同步(解決辦法參考后面)

AUTH_LDAP_ALWAYS_UPDATE_USER = True #是否同步LDAP修改

4.編輯views.py,當(dāng)用戶通過認(rèn)證后,還可以使用django自帶的用戶認(rèn)證、權(quán)限設(shè)置模塊:

from django.contrib.auth import authenticate,login as auth_login,logout as auth_logout
from django.contrib.auth.models import User

@csrf_exempt
def loginauth(request):
  user_loggedin='Guest'
  errors_list=[]
  if request.method == 'POST':
    print 'pp: ',request.POST.get('name'),request.POST.get('password')
    name = request.POST.get('name')
    password = request.POST.get('password')
    user = authenticate(username=name, password=password)
    print 'authuser',user
    if user is not None:
      auth_login(request,user)
      uu=request.user
      u=User.objects.get(username=uu)return HttpResponseRedirect("../check_dict")
    
  context={'errors_list':errors_list,'user_loggedin':user_loggedin}
  return render(request,'aptest/loginauth.html',context)

auth_user表結(jié)構(gòu):

如何在django中使用LDAP驗(yàn)證

admin后臺(tái)顯示:

如何在django中使用LDAP驗(yàn)證

解決中文亂碼問題(有問題可以試下):

在安裝django-auth-ldap-1.2.8.tar之前,先在里面的.py中加上'# -*- coding: UTF-8 -*-'

修改C:\Python27\Lib\site-packages\Django-1.8.4-py2.7.egg\django\conf\global_settings.py和修改settings.py,如下:

TIME_ZONE = 'Asia/Shanghai'
LANGUAGE_CODE = 'zh-hans'

======================== ========================

LDAP用戶驗(yàn)證基本原理

每個(gè)用戶在LDAP系統(tǒng)中有一個(gè)唯一的DN值,例如配置文件中默認(rèn)的admin用戶在LDAP中的DN值是uid=admin,ou=system,dc=eoncloud,dc=com, 其中eoncloud.com是域名,system是組名,admin是用戶名,有些LDAP用cn而不是uid來生成DN,在這種系統(tǒng)中admin的DN看起來像這樣cn=admin,ou=system,dc=eoncloud,dc=com,無論是uid還是cn或是別的前綴,django-ldap-auth都是用dn來驗(yàn)證用戶和獲取用戶信息的.

假設(shè)用戶輸入的帳號(hào)及密碼是: test, password.

django-auth-ldap有2個(gè)方式來獲取用戶的DN

  1. 使用AUTH_LDAP_USER_DN_TEMPLATE提供的模板生成DN.如uid=%(user)s,ou=users,dc=eoncloud,dc=com, 其中%(user)s會(huì)被替換成用戶名,這樣最終的DN就是uid=test,ou=users,dc=eonclooud,dc=com.

  2. 使用AUTH_LDAP_GROUP_SEARCH.如果沒有配置AUTH_LDAP_USER_DN_TEMPLATE,那么django-auth-ldap會(huì)使用AUTH_LDAP_BIND_DN和AUTH_LDAP_BIND_PASSWORD提供的dn與密碼根據(jù)AUTH_LDAP_GROUP_SEARCH提供的查詢條件去查找test用戶,如果查不到,驗(yàn)證失敗,如果查到用戶,就使用返回的數(shù)據(jù)生成test的DN. 

  3. 利用第2步生成DN值與密碼嘗試訪問LDAP系統(tǒng),如果訪問成功,則驗(yàn)證共過,否則驗(yàn)證失敗.

基本配置

  1. AUTH_LDAP_SERVER_URI. LDAP系統(tǒng)的地址及端口號(hào)

  2. AUTH_LDAP_BIND_DN, AUTH_LDAP_BIND_PASSWORD. 查找用戶及相關(guān)信息的默認(rèn)用戶信息

  3. AUTH_LDAP_USER_SEARCH. 第一個(gè)參數(shù)指指定詢目錄,第三個(gè)參數(shù)是過濾條件,過濾條件可以很復(fù)雜,有需要請(qǐng)查看相關(guān)文檔.

  4. AUTH_LDAP_USER_DN_TEMPLATE. 用戶DN模板,配置該參數(shù)后django-auth-ldap會(huì)用生成的DN配合密碼驗(yàn)證該用戶.

  5. AUTH_LDAP_USER_ATTR_MAP. LDAP與User model映射.

  6. AUTH_LDAP_ALWAYS_UPDATE_USER. 是否同步LDAP修改.

用戶組配置

如果需要,django-auth-ldap可以從ldap系統(tǒng)獲取用戶的組信息,也可以限定某個(gè)組里的用戶訪問,或者阻止某個(gè)組里的用戶訪問,無論是使用哪個(gè)功能都需要先配置組類型AUTH_LDAP_GROUP_TYPE及AUTH_LDAP_GROUP_SEARCH, 因?yàn)長(zhǎng)DAP里組的種類非常多,具體信息請(qǐng)查詢相關(guān)資料.

AUTH_LDAP_GROUP_TYPE

  • 值類型: LDAPGroupType的子類實(shí)例.LDAPGroupType有2個(gè)初始化參數(shù):member_attr, name_attr.member_attr是組成員的屬性名, name_attr是組名稱的屬性名.

  • 作用: AUTH_LDAP_GROUP_SEARCH返回的組的類型,并用來判斷用戶與組的從屬關(guān)系

AUTH_LDAP_GROUP_SEARCH

  • 值類型: LDAPSearch實(shí)例.

  • 作用: 用戶組的查詢條件

AUTH_LDAP_REQUIRE_GROUP

  • 值類型: 組的DN

  • 作用: 只有指定組的用戶可以訪問

AUTH_LDAP_DENY_GROUP指定的

  • 值類型: 組的DN

  • 作用: 禁止指定組的用戶訪問

AUTH_LDAP_MIRROR_GROUPS

  • 值類型: bool值

  • 作用: 導(dǎo)入用戶的組信息

AUTH_LDAP_MIRROR_GROUPS=True 這個(gè)參數(shù)是為了在用戶登錄的時(shí)候把用戶的域組關(guān)系也獲取并記錄下來。不過開啟這個(gè)參數(shù)會(huì)帶來另外一個(gè)問題:每次用戶登錄時(shí),都會(huì)把用戶的組關(guān)系刪除,重新從ldap中進(jìn)行同步。由于我們的系統(tǒng)中除了域組還有些自定義的組關(guān)系,這樣一來自定義組的用戶關(guān)系就不能持久保留了。按照我們的需求,其實(shí)只希望在用戶第一次登錄的時(shí)候同步組關(guān)系,以后的登錄并不需要。這個(gè)需求可以通過對(duì)django-auth-ldap的源碼(backend.py)進(jìn)行微調(diào)來實(shí)現(xiàn)。

backend.py源碼:

def _get_or_create_user(self, force_populate=False): 
...
...
  if self.settings.MIRROR_GROUPS: 
    self._mirror_groups() 

#修改為如下,然后重新安裝django-auth-ldap-1.2.8.tar,重啟WEB重新驗(yàn)證即可。
  if self.settings.MIRROR_GROUPS and created: 
    self._mirror_groups()

關(guān)于如何在django中使用LDAP驗(yàn)證就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

新聞標(biāo)題:如何在django中使用LDAP驗(yàn)證-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://m.newbst.com/article22/cejccc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)響應(yīng)式網(wǎng)站定制網(wǎng)站網(wǎng)站建設(shè)動(dòng)態(tài)網(wǎng)站商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)