9

ActiveDirectory データベースのユーザーを Django にインポートしたいと考えています。この目的のために、django_auth_ldap モジュールを使用しようとしています。

これが私がすでに試したことです:

私のsettings.pyで:

AUTH_LDAP_SERVER_URI = "ldap://example.fr"

AUTH_LDAP_BIND_DN = 'cn=a_user,dc=example,dc=fr'
AUTH_LDAP_BIND_PASSWORD=''
AUTH_LDAP_USER_SEARCH = LDAPSearch('ou=users,dc=example,dc=fr', ldap.SCOPE_SUBTREE, '(uid=%(user)s)')
AUTH_LDAP_GROUP_SEARCH = LDAPSearch('ou=groups,dc=example,dc=fr', ldap.SCOPE_SUBTREE, '(objectClass=groupOfNames)')

AUTH_LDAP_GROUP_TYPE = ActiveDirectoryGroupType()

#Populate the Django user from the LDAP directory
AUTH_LDAP_USER_ATTR_MAP = {
    'first_name': 'sAMAccountName',
    'last_name': 'displayName',
    'email': 'mail'
}


AUTHENTICATION_BACKENDS = (
    'django_auth_ldap.backend.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
)

それから私python manage.py syncdbは結果なしで呼び出します。警告もエラーも、auth_user テーブルで何も更新されていません。私がするのを忘れた明らかなことはありますか?

4

3 に答える 3

7

ドキュメントを見るとdjango_auth_ldap、モジュールは実際には LDAP ユーザーを調べてデータベースにロードしていないようです。代わりに、LDAP に対してユーザーを認証し、ユーザーのログイン時にauth_usersLDAP から取得した情報でユーザーを追加または更新します。

データベースに Active Directory のすべてのユーザーを事前に入力する場合は、AD に直接クエリを実行してユーザーを挿入するスクリプトを作成する必要があるようです。

このようなものから始める必要があります:

import ldap

l = ldap.initialize('ldap://your_ldap_server') # or ldaps://
l.simple_bind_s("cn=a_user,dc=example,dc=fr")
users = l.search_ext_s("memberOf=YourUserGroup",\
                         ldap.SCOPE_SUBTREE, \
                         "(sAMAccountName=a_user)", \
                         attrlist=["sAMAccountName", "displayName","mail"])

# users is now an array of members who match your search criteria.
# *Each* user will look something like this:
# [["Firstname"],["LastName"],["some@email.address"]]
# Note that each field is in an array, even if there is only one value.
# If you only want the first value from each, you can transform the results:
# users = [[field[0] for field in user] for user in users]

# That will transform each row into something like this:
# ["Firstname", "Lastname", "some@email.address"]

# TODO -- add to the database.

あなたのセットアップに関する情報がないので、データベースの更新をあなたに任せました。

LDAP クエリに関する詳細情報が必要な場合は、Stackoverflow で LDAP に関する質問を確認してください。また、この記事が役立つこともわかりました。

于 2011-07-28T14:57:55.210 に答える
2

ここではdjango_auth_ldapを使用したくないと思います。これは、ユーザーがログインするときにオンデマンドでユーザーを作成するだけだからです(他の人が指摘しているように)。代わりに、生のpython_ldapモジュールを使用して生のLDAPクエリを実行できます。

username = "..."
password  = "..."
scope = ldap.SCOPE_SUBTREE
base = "ou=...,dc=...,dc=..."
filter="..."
retrieve_attributes=['cn','uid','displayName']

l = ldap.open("your.ldap.server")    
l.protocol_version = ldap.VERSION3
l.simple_bind(username, password)
results = l.search_s(base, scope, filter, retrieve_attributes)

次に、結果を繰り返し処理して、モデルに詰め込みます。

于 2011-07-28T16:23:50.940 に答える