【问题标题】:Django Auth with LDAP and Local Accounts带有 LDAP 和本地帐户的 Django Auth
【发布时间】:2019-04-24 10:48:19
【问题描述】:

我目前正在使用 Django 和 LDAP。但是,我想将 LDAP 身份验证限制为仅本地帐户数据库中的帐户。 即,如果不存在本地帐户,则拒绝访问/ldap 身份验证。

通过查看LDAPSearch 的选项,我无法找到提供此选项的直接选项。关于如何实现这一点的任何想法?

基于 LDAP OU 的限制不是基于现有 LDAP 地址结构的选项。

谢谢,

【问题讨论】:

    标签: python django ldap


    【解决方案1】:

    正如felix001 在 cmets 中指出的那样,项目文档描述了一个标志AUTH_LDAP_NO_NEW_USERS

    防止在身份验证期间创建新用户。任何不在 Django 用户数据库中的用户都将无法登录。

    在设置中启用它会打开所需的行为:

    # settings.py
    
    ...
    
    AUTH_LDAP_NO_NEW_USERS = True
    

    但是,当前发布的 1.7.0 版本中不包含此功能,因此需要向后移植。我能想到的侵入性最小的 impl 是:

    # myapp/backend.py
    
    from django_auth_ldap import backend as ldap_backend
    
    
    # backport for AUTH_LDAP_NO_NEW_USERS setting
    ldap_backend.LDAPSettings.defaults.update(NO_NEW_USERS=False)
    
    
    class MyLDAPBackend(ldap_backend.LDAPBackend):
    
        def get_or_build_user(self, username, ldap_user):
            user, built = super().get_or_build_user(username, ldap_user)
            if self.settings.NO_NEW_USERS and built:  # user was not found in local db and created instead
                raise ldap_user.AuthenticationFailed(
                    f'username {username} does not exist in local DB.'
                )
            return user, built
    

    在设置中激活AUTH_LDAP_NO_NEW_USERS,并暂时使用自定义后端而不是LDAPBackend

    # myapp/settings.py
    
    AUTH_LDAP_NO_NEW_USERS = True
    AUTHENTICATION_BACKENDS += ('myapp.backend.MyLDAPBackend',)
    

    删除反向移植也很容易:一旦发布了 django-auth-ldap 的下一个版本,您唯一需要适应的就是 AUTHENTICATION_BACKENDS 元组(当然,删除 myapp/backend.py 模块)。

    【讨论】:

    • 谢谢。但是,看起来文档是错误的。您提供的链接显示它应该在 django-auth-ldap==1.7.0 中。但是,通过查看发行说明 (github.com/django-auth-ldap/django-auth-ldap/blob/master/…),此选项将包含在未发布的 2.0.0 中。
    • @felix001 我已经用NO_NEW_USERS 功能的反向移植提案更新了答案。
    • 这也适用于 django-python3-ldap 吗?因为它是 100% Python 代码,所以安装起来要容易得多,但我还没有找到如何用它来实现这个“无新用户”功能。
    • @tok 如果我正确阅读了django-python3-ldap 的代码,这是不可能的,因为用户在创建时会立即保存,因此需要重构库代码。您需要与包作者合作才能实现该功能。
    猜你喜欢
    • 2011-01-10
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多