使用 Python 實現 LDAP 互動的例子

2021-09-23 19:09:05 字數 1531 閱讀 2371

這兩天在配置 mutt 郵件客戶端,有乙個比較重要的功能就是需要實現使用 ldap 查詢公司的員工郵件。

python 上有現成的 ldap 模組,在  ,雖然官方上也有示例**,但是要正常從 ms 的服務中獲取到資料也真是折騰了一番。後面發現其實這個問題在官方的 faq 中都有明確說明的。

後來又看了一下 ldap 協議中filter的寫法,然後根據公司服務的情況自已定義了一些需要的屬性。

把一些東西搞明白之後,用起來還是比較順手的 :)

# -*- coding: utf-8 -*-

import

sysimport

ldap

ldap.set_option(ldap.opt_referrals, 0) <---

不加這個訪問不到ms的服務

con = ldap.initialize('server')

con.******_bind_s( 'user', 'password' )

base_dn =

'dc=***,dc=com'

scope = ldap.scope_subtree

input

= sys.ar**[1]

filter

="(&(|(cn=*%(input)s*)(mail=*%(input)s*))(mail=*))"

% attrs = ['mail', 'givenname', 'sn', 'department', 'telephonenumber', 'displayname']

result =

for i in con.search_s(base_dn, scope, filter, none):

if i[0]:

d = {}

for k in i[1]:

d[k] = i[1][k][0]

if'telephonenumber'

notin d:

d['telephonenumber'] =

'(無**)'

if'department'

notin d:

d['department'] =

'(無部門)'

if'sn'

notin d and

'givenname'

notin d:

d['givenname'] = d.get('displayname', '')

if'sn'

notin d:

d['sn'] =

''if

'givenname'

notin d:

d['givenname'] =

''print

'共找到結果 %s 條'

% (len(result))

for d in result:

print

'%(mail)s\t%(sn)s%(givenname)s\t%(telephonenumber)s %(department)s'

% d

參考:

配置OpenStack以使用LDAP實現身份管理

本文展示了如何配置 keystone,以便使用輕量級目錄 訪問協議 ldap 伺服器作為其身份服務的後端,而不是使用預設的 sql 後端。開源的 openstack 專案為構建公共雲和私有雲提供了乙個基礎架構即服務 iaas 層。企業 服務提供商 增值分銷商 中小型企業 研究人員和全球資料中心都使用...

使用LDAP認證

ldap目錄服務 ldap 輕量級目錄訪問協議 lightweight directory access protocol 由伺服器來集中儲存並向客戶端提供的訊息,儲存方式類似於dns分層結構 提供的資訊包括 使用者名稱 密碼 通訊錄 主機名對映記錄 典型的ldap工作模式 ldap伺服器為一組客戶...

python 連線使用LDAP認證的hive

主要使用pyhive包。使用linux中的普通賬號,venv環境。python版本 3.6.4。ldap認證需要sasl包,在安裝sasl包的時候因為機器中沒有g 編譯器,導致無法安裝。因為我使用的普通賬號,沒法給伺服器安裝g 編譯器,解決的方案是在另一台機器中安裝sasl,將安裝完成後生成的.so...