1

LDAPに対してユーザー認証を構築しようとしています。

settings.py:

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

AUTH_LDAP_SERVER_URI = "ldap://********-dc01.*******.ru"

import ldap
from django_auth_ldap.config import LDAPSearch

AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""
AUTH_LDAP_USER_SEARCH = LDAPSearch("cn=users,dc=*********,dc=ru",ldap.SCOPE_SUBTREE,"(uid=%(user)s)")

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

import logging

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

views.py:

@login_required
def project_list(request):
...

urls.py:

(r'^accounts/login/$', 'django.contrib.auth.views.login',{'template_name':'login.html'}),

テンプレートはこの例からのものです。

フォームを認証するのに時間がかかり、次のデバッグ出力が得られます。

search_s('cn=users,dc=********,dc=ru', 2, '(uid=bolotnov)') raised OPERATIONS_ERROR({'info': '000004DC: LdapErr: DSID-0C0906DC, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v1db0', 'desc': 'Operations error'},)
search_s('cn=users,dc=**********,dc=ru', 2, '(uid=bolotnov)') raised OPERATIONS_ERROR({'info': '000004DC: LdapErr: DSID-0C0906DC, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v1db0', 'desc': 'Operations error'},)
Authentication failed for bolotnov
Authentication failed for bolotnov

グーグルを試してみましたが、さらに蛾を助けることができるものは何も見つかりませんでした。おそらくコミュニティからのヒントです。何か簡単なことが欠けているか、チェックする必要がありますか?Softerra LDAPブラウザを介してLDAPに匿名でバインドできるようですが、ldap_auth_user_searchは多少異なるはずですか?

4

4 に答える 4

3

ldap_simple_bind_s()は正常なバインドを返しますが、それを機能させるために無効にしなければならなかった紹介オプションに関するものです。

ldap.set_option(ldap.OPT_REFERRALS, 0)
于 2012-02-16T19:31:43.410 に答える
1

匿名バインドであっても、サーバーにバインドする必要があります。

したがって、実際の値は

AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""
于 2012-02-14T00:54:29.443 に答える
1

この投稿で別の質問をすることができるかどうかはわかりません。views.pyには次のようなものがあります:

def login(request):

c = {}
c.update(csrf(request))
return render_to_response('login.html', c)

def auth_view(request):

username = request.POST.get('username'、'')password = request.POST.get('password'、'')user = auth.authenticate(username = username、password = password)

ユーザーがNoneでない場合:auth.login(request、user)return HttpResponseRedirect('/ loggedin')else:return HttpResponseRedirect('/ invalid')

私の質問は、LDAPサーバーとどのようにバインドできますか?djangoのドキュメントには、ロギング用のテンプレートがあります。

ロギングのインポート

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

しかし、rhisコードに正確に実装する方法がわかりません

于 2015-04-21T10:04:42.797 に答える
0

ええ、私はすでにsettings.pyにそれを持っています:

AUTH_LDAP_SERVER_URI = "ldap:// myldapadress"

AUTH_LDAP_BIND_DN = "" AUTH_LDAP_BIND_PASSWORD = "" AUTH_LDAP_USER_SEARCH = LDAPSearch( "my search configs"、ldap.SCOPE_SUBTREE、 "uid = uid")

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

logger = logging.getLogger('django_auth_ldap')

logger.addHandler(logging.StreamHandler())logger.setLevel(logging.DEBUG)

しかし、私の質問は、views.pyのこの関数がそれを使用するようにLDAPログをどこにどのように実装する必要があるかということでした。英語の間違いや一般的な質問でごめんなさい

于 2015-04-21T10:53:43.810 に答える