这是我的第一个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吗? 还是使用远程用户身份验证后端是更好的选择?
答案 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在这里他们也很好地解释了这一点。因此,解决方案可能在于包装本身