Python中Flask好用的LDAP扩展有哪些?flask-simpleldap和flask-ldap-login哪个更好用?

null
Python中Flask好用的LDAP扩展有哪些?flask-simpleldap和flask-ldap-login哪个更好用?

3 回复

Flask里搞LDAP认证,flask-simpleldapflask-ldap-login是俩常见选择,但都不算特别活跃。flask-simpleldap更偏向基础连接和查询,flask-ldap-login则直接集成了用户登录和会话管理。要我选的话,看需求:如果只是简单验证用户密码,flask-simpleldap够用;如果需要完整的登录流程、用户对象和装饰器保护路由,flask-ldap-login更省事。

不过现在更推荐直接用python-ldapldap3库自己封装,灵活性高得多。下面是个用ldap3在Flask里实现基础认证的示例:

from flask import Flask, request, jsonify
from ldap3 import Server, Connection, ALL, SUBTREE
from ldap3.core.exceptions import LDAPException

app = Flask(__name__)

# LDAP配置
LDAP_SERVER = 'ldap://your-ldap-server:389'
BASE_DN = 'dc=example,dc=com'
USER_DN_TEMPLATE = 'uid={username},ou=people,dc=example,dc=com'

def authenticate_ldap(username, password):
    """LDAP认证函数"""
    if not password:
        return False
    
    user_dn = USER_DN_TEMPLATE.format(username=username)
    
    try:
        server = Server(LDAP_SERVER, get_info=ALL)
        conn = Connection(server, user=user_dn, password=password, auto_bind=True)
        
        # 验证成功,可以在这里查询用户属性
        conn.search(
            search_base=BASE_DN,
            search_filter=f'(uid={username})',
            search_scope=SUBTREE,
            attributes=['cn', 'mail', 'uid']
        )
        
        user_info = conn.entries[0] if conn.entries else None
        conn.unbind()
        return bool(user_info)
        
    except LDAPException as e:
        print(f"LDAP认证失败: {e}")
        return False

@app.route('/login', methods=['POST'])
def login():
    data = request.get_json()
    username = data.get('username')
    password = data.get('password')
    
    if authenticate_ldap(username, password):
        return jsonify({'message': '认证成功', 'user': username}), 200
    else:
        return jsonify({'error': '认证失败'}), 401

if __name__ == '__main__':
    app.run(debug=True)

这代码直接连LDAP服务器验证用户,比用扩展更可控。ldap3的API比较现代,错误处理也清晰。记得装ldap3库:pip install ldap3

简单说:要快速集成用flask-ldap-login,要灵活控制就自己用ldap3写。


我们直接用 ldap3 结合 flask-login 了

好的 谢谢了!

回到顶部