PythonはLDAPユーザ認証を使用していますか

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):
        #取得または新しいユーザー
        リターンユーザー

おすすめ

転載: www.linuxidc.com/Linux/2019-07/159658.htm