LDAP(ライトディレクトリアクセスPortocol)は、X.500標準に基づいた軽量ディレクトリアクセスプロトコルであるTCP / IPをサポートしています。
LDAPディレクトリツリー階層では、データを格納します。各ディレクトリレコードには、識別名を持っている(識別名、DNと呼ばれる)、単一のレコードを読み取るため、通常、この:
CN =ユーザー名、OU =人、DC =テスト、dc = comの
次のようにいくつかのキーワードを意味:
- ベースDN:ツリーのルートであるLDAPディレクトリツリーの最上部には、DC =テスト、dc = comの部分の上にある、会社のドメイン名の一般的な使用は、また、前者はより柔軟性があり、= test.com Oのように記述することができます。
- DC ::ドメインコンポーネント、ドメイン名の一部。
- OU:組織単位、組織単位、データ領域を分離します。
- CN:共通名は、一般的にユーザー名を使用します。
- UID:ユーザID、及び効果は、CNと同様です。
- SN:姓、姓。
- RDN:相対DN、ディレクトリツリー内のDN-独立した部分、またはUIDのcnこのプロパティに通常存在します。
ユーザーtest.com会社の人部門のユーザ名を表すレコードの代わりこれを上記のdn、。
-ldap
一般的な使用のpython-LDAPのpythonライブラリ操作のLDAP、ドキュメント:https://www.python-ldap.org/en/latest/index.html。
ダウンロード:
python-LDAPをインストールPIP
apt-getをインストールビルド不可欠のpython3-devのpython2.7-devの\
libldap2-devのlibsasl2-devのslapdのLDAP-utilsののpython-TOX \
lcov valgrindの
groupinstall yumの「開発ツール」
yumのはopenldap-develののpython-develのインストール
取得するLDAP LDAPアドレスとの接続を確立するには:
インポートLDAP
ldapconn = ldap.initialize( 'LDAP://192.168.1.111:389')
バインドユーザーは、ユーザー認証に使用することができ、ユーザー名はDNである必要があります。
ldapconn.simple_bind_s( 'CN =ユーザー名、OU =人、DC =テスト、dc = comの' PWD)
これは、認証が成功するとタプルを返します:
(97、[]、1、[])
検証失敗は異常ldap.INVALID_CREDENTIALSに報告されます。
{ 'DESC':u'Invalidクレデンシャル}
検証による検証に合格ノートもnullである、注意がDNとPWDのためにチェックする必要があります。
LDAPクエリユーザー情報は、あなたがROOTDN管理者アカウントをログに記録する必要があります。
ldapconn.simple_bind_s( 'CN =管理、dc = test、dc = comと'、 'ADMINPWD')
searchScope = ldap.SCOPE_SUBTREE
searchFilter = 'CN =ユーザー名'
base_dnの= 'OU =人、DC =テスト、dc = comの'
印刷ldapconn.search_s(base_dnの、searchScope、searchFilter、なし)
ユーザーADD_S追加(DN、modlistを)、DN DN追加するエントリである、情報を格納するmodlist:
DN = 'CN =テスト、OU =人、DC =テスト、dc = comの'
modlist = [
( 'オブジェクトクラス'、[ '人'、 'organizationalPersonを']、
( 'C' [ 'テスト'])。
( 'Uidの' [ '' testuid])、
( 'のuserPassword'、[ 'PWD'])、
]
結果= ldapconn.add_s(DN、modlist)
正常に追加タプルを返します:
(105、[]、2、[])
失敗は異常ldap.LDAPErrorに報告されます
DjangoはLDAP認証を使用しています
非常に単純なLDAP認証バックエンド:
インポートLDAP
クラスLDAPBackend(オブジェクト):
「」」
LDAPで認証します。
「」」
_connection =なし
_connection_bound =偽
デフ(自己、ユーザ名=なし、passwdを=なし、** kwargsから)認証:
ユーザー名またはpasswdのではないではない場合:
Noneを返します
self._authenticate_user_dn(ユーザー名は、passwd)の場合:
ユーザー= self._get_or_create_user(ユーザー名は、passwd)
リターンユーザー
他:
Noneを返します
@property
デフ接続(自己):
self._connection_boundない場合:
self._bind()
リターンself._get_connection()
デフ_bind(自己):
self._bind_as(
LDAP_CONFIG [ 'USERNAME']、LDAP_CONFIG [ 'PASSWORD']、真
)
デフ_bind_as(自己、bind_dn、bind_password、粘着性=偽):
self._get_connection()。SIMPLE_BIND_S(
bind_dn、bind_password
)
self._connection_bound =スティッキー
デフ_get_connection(自己):
そうでない場合self._connection:
self._connection = ldap.initialize(LDAP_CONFIG [ 'HOST'])
リターンself._connection
デフ_authenticate_user_dn(自己、ユーザ名は、passwd):
bind_dn = 'CN =%S、%S' %(ユーザ名、LDAP_CONFIG [ 'BASE_DN'])
試してみてください。
self._bind_as(bind_dnは、passwd、偽)
真を返します
ldap.INVALID_CREDENTIALS除きます:
Falseを返します
デフ_get_or_create_user(自己、ユーザ名は、passwd):
#取得または新しいユーザー
リターンユーザー