django Python多重LDAP3身份验证

f0ofjuux  于 2023-02-25  发布在  Go
关注(0)|答案(1)|浏览(197)

我有两个问题...第一个是我可以使用下面的电子邮件地址进行身份验证,但我不能使用我的广告用户名。我已经更改了“用户名”:“邮件”--〉“用户名”:“sAMAccountName”不起作用...还尝试了“uid”,但没有任何效果...那么,这是怎么回事?

LDAP_AUTH_URL = "ldap://some_address"
LDAP_AUTH_FORMAT_USERNAME = "django_python3_ldap.utils.format_username_active_directory"
LDAP_AUTH_SEARCH_BASE = "dc=various_dc_values,dc=com"
LDAP_AUTH_OBJECT_CLASS = 'Person'

LDAP_AUTH_USER_FIELDS = {
 "username": "mail",
 "first_name": "givenName",
 "last_name": "sn",
 "email": "mail",

}
第二个问题是,我想在多个域上进行身份验证,因为我无法解决如何将其他域添加到设置文件中,我添加了自己的功能。

#Authenticate User using backend
#User object is returned with forename and surname.  Referenced in Templates.
user = auth.authenticate(username=email, password=password)

#did it work or is this a user that belongs to a different domain?
if user is None:
     #Create new User object.  This line doesn't work as expected, I want a blank authenticated User object not whatever this creates
     user = django_apps.get_model(settings.AUTH_USER_MODEL, require_ready=False)

     #Authenticate User with different domain
     #Request comes back with forename and surname set
     TryOtherAuthentication( email, password, request)

     #Code breaks here - 'AnonymousUser' object has no attribute 'first_name'
     user.first_name = request.user.first_name
     user.last_name = request.user.last_name
     user.is_staff = request.user.is_staff
     user.save()

因此,我猜问题是如何创建一个用户对象,就像使用后端身份验证返回的对象一样?
如果用户对象是使用后端身份验证进行身份验证的,则此代码有效。

user.first_name = 'Bugsy'
user.last_name = 'Malone'
user.save()

我知道向其他服务器进行身份验证的函数可以正常工作,并且在请求中返回值。
我只是不能解决如何创建一个用户对象,以便用户被定向到索引页面。

if user is not None:
        auth.login(request, user)
        return redirect('index')
qxgroojn

qxgroojn1#

LDAP3目前似乎不支持多后端认证。
所以我基本上只需要忽略整个“用户”,只需要会话变量来保存值。幸运的是,应用程序不是很大,所以不需要太多的修改。

相关问题