Django 身份验证 - 如果 LDAP 身份验证失败,则不要继续 ModelBackend
Django authentication - don’t continue to ModelBackend if LDAP auth fails
我对真实用户使用django_ldap_auth的LDAPBackend,对功能用户使用Django的ModelBackend。但是,LDAPBackend 会为每个能够登录的人创建一个 Django 用户,我可以在 Django 数据库中为该用户设置密码。
问题是,如果用户的 LDAP 身份验证失败,但对 Django 数据库成功,他可以登录。这不是期望的行为(我认为)。
但是,如果 LDAP 服务器因任何原因不可用,这可能会派上用场,但前提是 Django 密码已更新为成功登录的 LDAP 密码。
我的问题是双重的:
- 是否可以(使用我自己的后端或其他东西或 django_ldap_auth 本身)将正确的密码保存到 Django 数据库中?
- 如果不是,如果 LDAP 服务器可访问,用户是否存在于 LDAP 数据库中,但密码不匹配,即使该密码与 Django 数据库匹配,身份验证是否可能失败?
来自the docs:
If a backend raises a PermissionDenied
exception, authentication will immediately fail. Django won't check the backends that follow.
因此,如果 LDAP 后端 returns None,则 Django 将尝试使用模型后端进行身份验证。但是,如果它引发 PermissionDenied
,则登录将失败。
我对真实用户使用django_ldap_auth的LDAPBackend,对功能用户使用Django的ModelBackend。但是,LDAPBackend 会为每个能够登录的人创建一个 Django 用户,我可以在 Django 数据库中为该用户设置密码。
问题是,如果用户的 LDAP 身份验证失败,但对 Django 数据库成功,他可以登录。这不是期望的行为(我认为)。
但是,如果 LDAP 服务器因任何原因不可用,这可能会派上用场,但前提是 Django 密码已更新为成功登录的 LDAP 密码。
我的问题是双重的:
- 是否可以(使用我自己的后端或其他东西或 django_ldap_auth 本身)将正确的密码保存到 Django 数据库中?
- 如果不是,如果 LDAP 服务器可访问,用户是否存在于 LDAP 数据库中,但密码不匹配,即使该密码与 Django 数据库匹配,身份验证是否可能失败?
来自the docs:
If a backend raises a
PermissionDenied
exception, authentication will immediately fail. Django won't check the backends that follow.
因此,如果 LDAP 后端 returns None,则 Django 将尝试使用模型后端进行身份验证。但是,如果它引发 PermissionDenied
,则登录将失败。