Active Directory インスタンスに対して認証するためのプロトコル (暗号化されていない) を使用して構成django-auth-ldap
しましたが、動作します。ldap
問題は、経由ldaps
で接続しようとすると、最初の認証試行は常に失敗しますが、2 回目の認証試行は成功します。エラーメッセージは次のとおりです
「正しいユーザー名とパスワードを入力してください。両方のフィールドで大文字と小文字が区別される場合があることに注意してください。」
このサーバーでは STARTTLS が機能していないようです (少なくとも、私は機能していません) ldaps
。
以下は、私のsettings.py
. 誰かが問題を明らかにしたり、これをさらに調査する方法についてアドバイスしたりできることを願っています. 実際の Active Directory サーバーにはアクセスできないため、残念ながらサーバー側のログにはアクセスできません。
AUTH_LDAP_SERVER_URI = 'ldaps://ldap.internal.acme.com' # modified for ldaps
AUTH_LDAP_BIND_DN = 'CN=service1,OU=Service Accounts,DC=internal,DC=acme,DC=com'
AUTH_LDAP_BIND_PASSWORD = r'***'
# If STARTTLS is False, then the ldaps protocol will be used.
AUTH_LDAP_START_TLS = False # added for ldaps
AUTH_LDAP_USER_SEARCH = LDAPSearchUnion(
LDAPSearch(
'OU=UserAccounts,DC=internal,DC=acme,DC=com',
ldap.SCOPE_SUBTREE,
'(sAMAccountName=%(user)s)',
),
LDAPSearch(
'OU=Service Accounts,DC=internal,DC=acme,DC=com',
ldap.SCOPE_SUBTREE,
'(sAMAccountName=%(user)s)',
),
)
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
'OU=Groups,DC=internal,DC=acme,DC=com',
ldap.SCOPE_SUBTREE,
'(objectClass=group)',
)
AUTH_LDAP_GROUP_TYPE = NestedActiveDirectoryGroupType()
AUTH_LDAP_USER_ATTR_MAP = {
'username' : 'sAMAccountName',
'first_name' : 'givenName',
'last_name' : 'sn',
'email' : 'mail',
}
AUTH_LDAP_CONNECTION_OPTIONS = {
ldap.OPT_DEBUG_LEVEL: 1,
ldap.OPT_X_TLS_CACERTFILE: '/www/certs/cert.pem', # added for ldaps
}