1

我是 LDAP 身份验证的新手,并且通过了一些 StackOverflow 问题和 django-auth-ldap 文档,我能够在我的 django 项目中实现 LDAP 身份验证。我有一个自定义用户模型来存储用户信息。但我的问题是,当我们使用 user_id 和密码进行身份验证时,为什么身份验证将用户信息存储在自定义用户模型中。它还存储散列密码。

我在 settings.py 文件中使用 LDAPBackend 作为我的身份验证后端,如下所示

AUTHENTICATION_BACKENDS = [
    'django_auth_ldap.backend.LDAPBackend'
]

例如当我们执行以下操作时

auth = LDAPBackend()
user = auth.authenticate(request, username=user_id, password=user_password)

用户对象存储在自定义用户模型中。我的要求是在进行身份验证时不要存储任何用户信息,也不要存储任何密码(无论是散列密码)。在将其存储到自定义用户模型的用户信息中之前,我需要做一些预先检查。但是 LDAPBackend.authenticate() 在进行身份验证时存储用户信息。

任何人都可以请帮助我并澄清这里发生了什么。

谢谢

4

1 回答 1

0

在这里,您可以看到一个完整的示例,非常有指导性地展示了如何创建自定义LDAPBackend.

如果您需要向身份验证添加额外的逻辑,您可以使用自定义LDAPBackend而不是默认的:

AUTHENTICATION_BACKENDS = (
    'accounts.backends.MyLDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
)

然后在accounts/backends.py

from django_auth_ldap.backend import LDAPBackend

class MyLDAPBackend(LDAPBackend):
    """ A custom LDAP authentication backend """

    def authenticate(self, username, password):
        """ Overrides LDAPBackend.authenticate to add custom logic """

        user = LDAPBackend().authenticate(self, username, password)
        
        # If user has successfully logged, make your custom steps
        if user:
            """ Add custom logic here """
            # user.set_password(password)
            # user.save()
            
            return user

查看上面链接的示例以获取更多详细信息。

于 2019-11-20T21:40:27.403 回答