9

LDAP認証モジュールdjango-auth-ldapに問題があります。このサイトの設定例を使用しています:http://packages.python.org/django-auth-ldap/

私は2つのことをしたいと思います:

1)LDAPに対する認証:現時点では、LDAPデータベースは空であり、何も追加していません。実際、その方法がわかりません。ただし、djangoデータベースに保存されている古いログイン/パスワードを使用して、djangoベースのサイトにログインすることはできます。何故ですか?これを無視するべきではありません。代わりに、LDAPユーザー/パスワードを使用してログインプロセスを実行するべきではありませんか?つまり、LDAPデータベースが空の場合、ログインのすべてが失敗するべきではありませんか?ただし、そうではありません。djangoはdjango-auth-ldapモジュールを完全に無視しているようです。

2)LDAPをdjangoと同期します(その逆ではありません)。既存のユーザーデータベースを使用して認証を行いたくありません。Djangoで新しいユーザーを作成し、これらのユーザーをLDAPに伝播して、他のサービス(私の場合はopenfireサーバー)で共有できるようにしたいと考えています。django-auth-ldapでそれをどのように行いますか?

これが私の設定のコピー/貼り付けです:

# Baseline configuration.
AUTH_LDAP_SERVER_URI = "127.0.0.1"

AUTH_LDAP_BIND_DN = "cn=admin,dc=nodomain"
AUTH_LDAP_BIND_PASSWORD = "admin"
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=nodomain",
    ldap.SCOPE_SUBTREE, "(uid=%(user)s)")

# Set up the basic group parameters.
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=django,ou=groups,dc=nodomain",
    ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)"
)
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="cn")

# Only users in this group can log in.
AUTH_LDAP_REQUIRE_GROUP = "cn=enabled,ou=django,ou=groups,dc=nodomain"

# Populate the Django user from the LDAP directory.
AUTH_LDAP_USER_ATTR_MAP = {
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail"
}

AUTH_LDAP_PROFILE_ATTR_MAP = {
    "employee_number": "employeeNumber"
}

AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    "is_active": "cn=active,ou=django,ou=groups,dc=nodomain",
    "is_staff": "cn=staff,ou=django,ou=groups,dc=nodomain",
    "is_superuser": "cn=superuser,ou=django,ou=groups,dc=nodomain"
}

AUTH_LDAP_ALWAYS_UPDATE_USER = True

AUTH_LDAP_FIND_GROUP_PERMS = True

AUTH_LDAP_CACHE_GROUPS = True
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600


# Keep ModelBackend around for per-user permissions and maybe a local
# superuser.
AUTHENTICATION_BACKENDS = (
    'django_auth_ldap.backend.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
)

申し訳ありませんが、LDAPについてはよくわかりません。今朝インストールしたばかりなので、質問は単純に聞こえるかもしれません。更新して複数のサーバー間で共有できる一元化されたユーザーベースが必要です。

どうもありがとうございました。

4

1 に答える 1

9

1) 構成には 2 つの認証バックエンドがインストールされています。

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

Django は、成功するものが見つかるまで (またはなくなるまで)、順番にそれぞれに対して認証を試みます。LDAP ディレクトリが空であるため、おそらく常に失敗します。そのため、ModelBackend は常にショットを取得します。Django ユーザー データベースに対してユーザーを認証したくない場合は、リストから ModelBackend を削除する必要があります。

2) django-auth-ldap は、Django ユーザーを LDAP まで伝播しません。その逆のみです。Django デプロイメントが、個別に管理されている既存の LDAP サービスに対して認証できるように設計されています。Django アプリから LDAP ディレクトリの内容を操作するには、django-ldapdbを参照してください。

于 2011-06-25T19:34:14.187 に答える