1

OpenLDAPを使用していますが、django_auth_ldapを使用してDjangoに接続したいと思います。私が従おうとしているオプションが何であれ、それは正しく機能せず、正しい解決策を見つけることができません。

使用されているさまざまなソフトウェアのバージョンは次のとおりです。

  • OpenLDAP 20423(LDAPv3)
  • Django 1.4.1または1.4.3(両方で試しました)
  • django_auth_ldap 1.1.3

LDAPディレクトリnoc.nocには、テストの実行に使用しているというユーザーがいます。

settings.py次の行でファイルを更新しました。

import ldap, logging
from django_auth_ldap.config import LDAPSearch, PosixGroupType

.
.
.

logger = logging.getLogger('django_auth_ldap')
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG) 

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

AUTH_LDAP_SERVER_URI = "ldap://ldap.XXX.XX"
AUTH_LDAP_BIND_DN = "cn=<LDAPUSER>,dc=XXX,dc=XX"
AUTH_LDAP_BIND_PASSWORD = "<LDAPPASSWORD>"

AUTH_LDAP_USER_SEARCH = LDAPSearch("dc=XXX,dc=XX",
    ldap.SCOPE_SUBTREE, "(uid=%(user)s)")

AUTH_LDAP_GROUP_TYPE = PosixGroupType(name_attr='cn')
AUTH_LDAP_REQUIRE_GROUP = "cn=<USERGROUP>,ou=Groups,dc=XXX,dc=XX"

AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=Groups,dc=XXX,dc=XX",
    ldap.SCOPE_SUBTREE, "(objectClass=posixGroup)"
)

AUTH_LDAP_USER_ATTR_MAP = {
    'first_name': 'givenName',
    'last_name': 'sn',
    'email': 'mail',
}

noc.nocまた、Djangoインターフェースでユーザーと接続しようとすると、次のログメッセージが表示されます。

search_s('dc=XXX,dc=XX', 2, '(uid=%(user)s)') returned 1 objects: 
cn=noc.noc,ou=users,dc=XXX,dc=XX
cn=noc.noc,ou=users,dc=XXX,dc=XX is not a member of cn=<USERGROUP>,ou=groups,dc=XXX,dc=XX
Authentication failed for noc.noc

行を削除した場合:

AUTH_LDAP_REQUIRE_GROUP = "cn=<USERGROUP>,ou=Groups,dc=XXX,dc=XX"

インターフェイスへの接続は機能しますが、LDAPデータベース内のすべてのユーザーでも機能します。これは、私が探しているものではありません。

また、次のコマンドを使用して、ユーザーがldapデータベースと正しいグループに適切に存在することを確認しました。

ldapsearch -h 'ldap.XXX.XX' -D 'cn=<LDAPUSER>,dc=XXX,dc=XX' -w '<LDAPPASSWORD>' -b 'cn=<USERGROUP>,ou=Groups,dc=XXX,dc=XX'

そして結果は次のとおりです。

# extended LDIF
#
# LDAPv3
# base <cn=<USERGROUP>,ou=Groups,dc=XXX,dc=XX> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# <USERGROUP>, Groups, XXX.XX
dn: cn=<USERGROUP>,ou=Groups,dc=XXX,dc=XX
cn: <USERGROUP>
gidNumber: 501
memberUid: cn=user1,ou=Users,dc=XXX,dc=XX
memberUid: cn=noc.noc,ou=Users,dc=XXX,dc=XX
objectClass: posixGroup

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

で他のパラメーターを試しsettings.py、Webで同様の問題を探しましたが、読んだ解決策で問題が解決しませんでした。

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

4

1 に答える 1

2

Django-auth-ldapは、DNの代わりにCNを使用してグループメンバーを識別しています。このため、解決策は次のものを置き換えることです。

cn=noc.noc,ou=Users,dc=XXX,dc=XX

LDAPのグループのmemberUidフィールドで:

noc.noc

これで問題は解決します。

別の解決策は、django-auth-ldapのソースを変更することです。これを行うには、ファイルconfig.py(私のインストールでは/usr/local/lib/python2.6/dist-packages/django-auth-ldapにあります)を編集して、次の関数を見つける必要があります。

def user_groups(self, ldap_user, group_search):

クラスの:

class PosixGroupType(LDAPGroupType):

次に、行を置き換えます。

user_uid = ldap_user.attrs['uid'][0]

に:

user_uid = ldap_user.dn

これでもうまくいくはずです。

于 2013-02-06T08:52:58.697 に答える