具有LDAP支持的基本身份验证且无用户模型的Django身份验证

时间:2018-08-08 12:37:43

标签: django django-rest-framework ldap

这是我的第一个Django项目,请耐心等待。我正在创建一个纯DRF项目。

我的要求是,用户将以基本身份验证格式发送用户凭据时调用REST API,而我需要针对LDAP服务器进行验证。

此外,每个API都发送了凭据,因此不需要在我的末尾存储凭据(在默认的USER模型中)

我打算使用:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
    )
} and 
INSTALLED_APPS = [
    'django.contrib.auth',
}

能够阅读基本身份验证凭据,然后希望挂接:

AUTHENTICATION_BACKENDS = [
    'django_auth_ldap.backend.LDAPBackend',
] 

在LDAP服务器上对用户进行身份验证。

问题:

-有更好的方法吗?

-因为我只将凭据传递给LDAP服务器以了解凭据是否有效,所以我不需要数据库中的USER表。我只需要它用于对象建模。我该如何实现?代理模型会有所帮助吗?我们可以有一个抽象模型作为AUTH_USER_MODEL吗? 还是使用远程用户身份验证后端是更好的选择?

1 个答案:

答案 0 :(得分:0)

要简短回答,可以,您可以制作一个替换User模型的类,如下所示:

class User(object):
    def __init__(self, authenticated=False, email=None):
        self.is_authenticated = authenticated
        self.email = email

真正的问题是如何让您的身份验证中间件在您的request.user中返回它。有多种方法(我从未使用过django-auth-ldap,所以可能我没有为此编写最佳实践。):

一种解决方案可能是:

将从此类django_auth_ldap.backend.LDAPBackend https://django-auth-ldap.readthedocs.io/en/latest/reference.html#django_auth_ldap.backend.LDAPBackend继承

from django_auth_ldap.backend import LDAPBackend

class CustomLDAP(LDAPBackend)
    def get_user_model(self):
        # return your custom user

然后您需要AUTHENTICATION_BACKENDS

AUTHENTICATION_BACKENDS = [
    'path.to.CustomLDAP',
] 

我不确定您是否要DEFAULT_AUTHENTICATION_CLASSES 如果您正在使用django-auth-ldap。可能是这个LDAP authentication with django REST  也有帮助

首先阅读

我认为https://django-auth-ldap.readthedocs.io/en/latest/users.html在这里他们也很好地解释了这一点。因此,解决方案可能在于包装本身

相关问题