django プロジェクトで LDAP 認証を構成しようとしています。
django に入る前に、次のシェル コマンドが正常に返されることをテストしました。
ldapsearch -H ldap://172.16.34.4 -b "dc=corp,dc=rate,dc=com" -D corp\\peter -W sAMAccountName=peter
結果:
...
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 1
# numReferences: 1
しかし、 django settings.pyに関しては、設定する項目がたくさんあることをご存知でしょう。そして、私は多くの組み合わせを試しましたが、運がありませんでした.
AUTH_LDAP_SERVER_URI = 'ldap://172.16.34.4'
AUTH_LDAP_USER_SEARCH = LDAPSearch(
"DC=corp,dc=rate,dc=com",
ldap.SCOPE_SUBTREE,
"(sAMAccountName=%(user)s)"
)
AUTH_LDAP_USER_ATTR_MAP = {
"username": "sAMAccountName",
"name": "cn",
"email": "mail",
"first_name": "displayName",
"last_name": "sn"
}
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend',
'django.contrib.auth.backends.ModelBackend'
)
そして、ログインするための API を作成します。
from rest_framework.views import APIView
class LoginAuth(APIView):
def post(self, request, *args, **kwargs):
user_loggedin = 'guest'
display_name = 'guest'
username = self.request.data.get('username')
password = self.request.data.get('password')
usergo = authenticate(username=username, password=password) # usergo always returns None
print('authuser', usergo)
if usergo is not None:
auth_login(self.request, usergo)
user_loggedin = usergo.username
display_name = usergo.first_name
context = {
'username': user_loggedin,
'displayName': display_name,
'state': False
}
return Response(context, status=status.HTTP_200_OK)
return Response(
f'Failed to authenticate with {username} / {password}',
status=status.HTTP_400_BAD_REQUEST
)
投稿データでエンドポイントにアクセスすると、次のようなエラーが発生しました (usergo は常に None を返します)。
投稿データ:</p>
{
"username": "corp\\peter",
"password": "mypassword"
}
ピーターの認証に失敗しました: ユーザー名を DN にマップできませんでした。
誰でも私を助けることができますか? settings.py 構成にいくつかのエラーがあるはずです。