【问题标题】:Using LDAP Authentication but ModelBackend Authorisation使用 LDAP 身份验证但 ModelBackend 授权
【发布时间】:2014-11-25 07:03:41
【问题描述】:

我一直在开发一个针对 LDAP 进行身份验证的 Django 应用程序。我在管理界面中创建了权限和组。在开发模式下,我的两个后端都处于活动状态

AUTHENTICATION_BACKENDS = (
    'django_auth_ldap.backend.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
)

Django 尝试在其所有身份验证后端进行身份验证。无论在哪里成功,它都会使用授予用户的 ModelBackend 授权(权限和组)。

但是当禁用 'django.contrib.auth.backends.ModelBackend' 时,Django 不使用标准的授权方法。在生产环境中,我希望用户仅针对 LDAP 进行身份验证。

我的问题:

是否有禁用 ModelBackend 授权但仍使用 ModelBackend 授权的选项。

编辑

docs of django-auth-ldap 中的第一个注释:

注意 LDAPBackend 不继承自 ModelBackend。可以通过将 LDAPBackend 配置为从 LDAP 服务器中提取组成员身份来独占使用 LDAPBackend。但是,如果您想在 Django 中为单个用户分配权限或将用户添加到组中,则需要安装两个后端:

但我仍然感到困惑。这没有技术原因。当两个后端都激活并针对 LDAP 进行身份验证时,Django 仍然能够使用 Django 权限。

【问题讨论】:

    标签: django ldap


    【解决方案1】:

    这是很久以前提出的,所以我希望你能找到答案......但是为了帮助其他可能偶然发现这个问题的人:

    “授予用户的权限将是所有后端返回的所有权限的超集。也就是说,Django 向用户授予任何一个后端授予的权限。”

    https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#handling-authorization-in-custom-backends

    这意味着它正在检查所有后端中的所有权限/权限方法,即使您使用 LDAPBackend 进行了身份验证,Django 也会从 LDAPBackend + ModelBackend 中提取权限/权限并将它们组合在一起。

    如果你真的很想确定 ModelBackend.authenticate() 永远不会被调用,你总是可以让你自己的类 MyAuth(ModelBackend) 继承自 ModelBackend 并覆盖其中的身份验证以始终返回 None。然后你可以将它包含在你的 settings.py 文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-22
      • 2012-09-06
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 2014-02-07
      相关资源
      最近更新 更多