12

django を使用してアプリを実行しています。これで、openldap サーバー経由で認証されたユーザーのみが「自分のビュー」を表示できるようになりました (したがって、認証が成功した後に uid のみが必要です)。

どうすればそれを達成できますか?

私はdjango-auth-ldapが行くべき道だと思うので、認証が実際に行われる場所と、ビューを要求しているユーザーのuidを取得する方法を一日中調べてみました。

settings.pyのドキュメントを使用しましたが、「実際に使用する」方法がわかりませんでした。多分誰かが私を正しい方向に向けることができますか?

settings.py:

import ldap

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

AUTH_LDAP_SERVER_URI = "ldap://123.60.56.61"

AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""
AUTH_LDAP_USER_DN_TEMPLATE = "uid=%(user)s,dc=rd,dc=corpintra,dc=net"

(ちなみに、私はすでに python-ldap で ldap-searche を実行し、コマンドラインで ldapsearch のような結果を取得できるので、他のすべてはうまく機能します...)

私の意見には何が必要ですか?

ご協力いただきありがとうございます!

4

3 に答える 3

8

これは、私たちのサイトの 1 つからのスニペットです。

# Django Auth Ldap
main_dn = 'dc=____,dc=organisation,dc=com'
groups_dn = 'ou=Groups,'+main_dn
users_dn = 'ou=Users,'+main_dn

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

AUTH_LDAP_SERVER_URI = "ldap://ldap.organisation.com"
AUTH_LDAP_BIND_DN = 'cn=___,'+main_dn
AUTH_LDAP_BIND_PASSWORD = "__________________"
AUTH_LDAP_USER_SEARCH = LDAPSearch(users_dn, 2, "(uid=%(user)s)")
AUTH_LDAP_USER_ATTR_MAP = {
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail"
}
AUTH_LDAP_MIRROR_GROUPS = True
AUTH_LDAP_ALWAYS_UPDATE_USER = True
AUTH_LDAP_GROUP_TYPE = PosixGroupType()
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(groups_dn, ldap.SCOPE_SUBTREE, "(objectClass=posixGroup)")

AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    "is_staff":         "cn=admins,"+groups_dn,
    "is_superuser":     "cn=developers,"+groups_dn,
}

編集:

質問は「ビューで何が必要ですか?」なので、答えは、この構成がユーザーの uid を User モデルのユーザー名フィールドとして保存することです。したがって、ビューでは、

uid = request.user.username

うまくいけば、これで起動して実行できます。

于 2013-03-28T11:48:18.433 に答える
2

django-auth-ldap は通常の Django 認証バックエンドでrequest.userあるため、認証されたユーザーに設定する必要があります (標準のミドルウェアがインストールされていると仮定します — Django ドキュメントを参照してください)。典型的なセットアップでrequest.user.usernameは、ユーザーの DN の uid になります。さらに情報が必要な場合は、 から入手できますrequest.user.ldap_user

于 2013-03-29T21:21:56.437 に答える