2012-07-23 73 views
0

我正在編寫一段使用來自ldap服務器的驗證的代碼。目前我的代碼只允許用戶DN和密碼進行登錄。在ldap中提取DN(專有名稱)

Username: CN=mynane,CN=Users,DC=example,DC=com 
Pwd : XXXX 

什麼是現在要做的就是讓用戶名在

Username: [email protected] 
Pwd: xxxx 

我可以綁定使用格式爲「[email protected]」證書服務器的格式,但我的代碼還需要「myname」組的身份驗證。爲此,我需要從「[email protected]」中找出DN,以便我可以提取組「myname」所屬的DN。

所以我的問題是我怎麼能找出DN從格式「[email protected]

它怎麼辦?

感謝

回答

0

如果您想查詢通過電子郵件地址DN,你可以嘗試下面的代碼。

ldap = "SELECT distinguishedName From 'LDAP://DC=example,DC=com' WHERE mail = '{}'" 
mail = '[email protected]' 

import win32com.client 
c = win32com.client.Dispatch('ADODB.Connection') 
c.Open('Provider=ADsDSOObject') 
rs,rc = c.Execute(ldap.format(mail)) 
while not rs.EOF: 
    for e in rs.fields: 
     print('{}: {}'.format(e.Name, e.Value)) 
    rs.MoveNext() 
+0

我不確定,但我認爲上面的代碼正在做的是提取郵件是在驗證期間給出的郵件條目的DN屬性。 「[email protected]」與用戶「myname」的電子郵件有什麼關係。 – ashokadhikari 2012-07-23 10:56:24

+0

對不起,我不明白你的意思。 [email protected]不是用戶的電子郵件,是嗎?或者,也許用戶沒有啓用電子郵件,但他可以使用「[email protected]」進行身份驗證? – user1430185 2012-07-23 11:12:31

+0

不是[email protected]不是用戶郵件。對不起,我起初感到困惑:)。我正在使用python-ldap綁定到服務器並查詢數據庫。不是python-ldap允許這個嗎?我的意思是上述類型的工作。 – ashokadhikari 2012-07-24 04:12:53

0

你必須做兩件事情:

  1. 爲DNS域example.com找到正確的子樹(通常來自配置子樹),如果只有一個域,它更容易,只需忽略@之後的部分。
  2. 查看該子樹中的sAMAccountName = myname,因爲它在域內是唯一的。

這些名稱通常看起來像UPN,但不是。實際上,它們通常只是附加到DNS域名的sAMAccountName。