使用LDAP登录Flask中的用户信息

时间:2016-11-03 17:16:44

标签: python flask flask-login python-ldap

我正在尝试从Flask中的LDAP身份验证/登录用户中找到检索“mail”,“displayName”,“telephoneNumber”等信息的方法。

我的用户可以使用LDAP成功进行身份验证和登录。但是,我如何才能获得有关用户的其他信息?

我正在使用标准的python-ldap和flask-login模块,我正在尝试为这些属性创建一个字符串变量,以便稍后在会话中调用它们。尝试运行查询时,我收到ldap.FILTER_ERROR: {'desc': u'Bad search filter'}。关于如何使这个工作的任何想法?

class UserInfo():
    def whoami(username, password):
        conn = get_ldap_connection()
        conn.simple_bind_s(username,password)
        basedn = 'OU=...,OU=...,DC=...,DC=...'
        userfilter = "(|(SamAccountName=\*" + username + "\*)"
        userattribute = ['displayName']
        userresults = conn.search_s(basedn,ldap.SCOPE_SUBTREE,userfilter, userattribute)

userinfos = UserInfo()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(100))

    def __init__(self, username, password):
        self.username = username

    @staticmethod
    def try_login(username, password):
        conn = get_ldap_connection()
        conn.simple_bind_s(domain+username, password)

    def is_authenticated(self):
        return True

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def get_id(self):
        return unicode(self.id)

@login_manager.user_loader
def load_user(id):
    return User.query.get(int(id))

@app.before_request
def get_current_user():
    g.user = current_user

1 个答案:

答案 0 :(得分:0)

我需要使用ldap.filter.filter_format进行正确的字符转义。

import ldap.filter

criteria= ldap.filter.filter_format('(&(objectClass=user)(sAMAccountName=%s))', [username])