具有LDAP3的身份验证Django应用



我在Django应用中对身份验证用户有问题。我正在使用Python 3.5和Django 1.10。

我编写了简单的绑定配置,以检查用户是否是数据库的用户:

    username = request.POST['username']
    password = request.POST['password']
    server = Server(LDAP_AUTH_URL)
    c = Connection(server, user=LDAP_AUTH_CONNECTION_USERNAME, password=LDAP_AUTH_CONNECTION_PASSWORD)
    c.open()
    c.bind()
    if c.bind():
        user_search_filter = '(uid={})'.format(username)
        c.search(search_base=LDAP_AUTH_SEARCH_BASE,
                 search_filter=user_search_filter,
                 search_scope=SUBTREE)
    username = c.response[0]['dn']
    if c.rebind(user=username, password=password):
        return HttpResponseRedirect(next)

但是现在我不知道该怎么办,在Django中,我们当然有这样的东西:

    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            auth.login(request, user)
            return HttpResponseRedirect(next)
        else:
            return render(request, 'login.html', {'error_message': 'Your account has been disabled'})
    else:
        return render(request, 'login.html', {'error_message': 'Invalid login'})

但是,在这种情况下,我们必须在我们的基础上不提供LDAP授权的用户帐户。

因此,当我通过LDAP登录时,我想从Django获得授权,以便使用>"@login_required"访问任何其他视图"

我对python的LDAP和LDAP3的思考可能出了点问题。3。

任何人都可以帮助我或给我有用的链接?

用户授权的拆分管理。

添加功能以检查LDAP验证。说它将通过提供的凭据返回True/False

def ldap_auth(login, password):
    ...
    return c.bind()

因此,在Auth View中,您需要对LDAP和非LDAP用户进行两个不同的条件:

# if it is ldap user check ldap_auth
# if user doesn't exist locally you could create it manually in case of successful auth
else:
    user = authenticate(username=username, password=password)

在前端您需要以某种方式指定它是否是LDAP用户。或者,您可以进一步添加一些基于几张检查的逻辑:如果没有结果,请尝试在普通用户中找到用户 - 尝试通过LDAP登录。

添加django身份验证后端,用于LDAP身份验证类似: /users/auth/backend.py并在您的设置中配置此后端。pydjango将其用于所有登录电话。

并添加实现LDAP auth的authenticate()方法。您还需要实现get_user()方法。

建议您在第一次登录时从LDAP中同步一个用户帐户,或者您在Active Directory中首次从应用程序中搜索用户并维护应用程序的用户模型。

可以在此处找到有关设置身份验证后端和同步用户的更多信息:

自定义Django身份验证bakcend

相关内容

  • 没有找到相关文章

最新更新