Odoo 连接ldap 域认证
附一个验证ldap的python代码。
import socket from ldap3 import Server, Connection, ALL class LDAPClient: def __init__(self, host, port, user_dn, password): self.host = host self.port = port self.user_dn = user_dn self.password = password self.server = Server(host, port=port, get_info=ALL) self.conn = None def is_port_open(self): """ 检查远程主机的指定端口是否开放 :return: 端口开放返回True,否则返回False """ try: with socket.create_connection((self.host, self.port), timeout=5) as sock: return True except (socket.timeout, ConnectionRefusedError): return False def test_ldap_service(self): """ 使用ldap3库验证LDAP服务是否正常 :return: 验证成功返回True,否则返回False """ try: self.conn = Connection(self.server, user=self.user_dn, password=self.password, auto_bind=False) if self.conn.bind(): print("LDAP服务验证成功") return True else: print(f"LDAP服务验证失败: {self.conn.result}") return False except Exception as e: print(f"LDAP服务验证失败: {e}") return False def list_all_users(self, search_base): """ 列出所有用户 :param search_base: 搜索的基准DN :return: 用户列表 """ try: if not self.conn: self.conn = Connection(self.server, user=self.user_dn, password=self.password, auto_bind=True) self.conn.search(search_base, '(objectClass=person)', attributes=['cn', 'givenName', 'sn']) if self.conn.entries: print("用户列表如下:") for entry in self.conn.entries: print(entry) return self.conn.entries else: print("未找到用户") return [] except Exception as e: print(f"列出用户失败: {e}") return [] def search_user_and_verify_password(self, search_base, search_filter): """ 查询用户并验证密码 :param search_base: 搜索的基准DN :param search_filter: 搜索过滤器 :return: 验证成功返回True,否则返回False """ try: if not self.conn: self.conn = Connection(self.server, user=self.user_dn, password=self.password, auto_bind=True) self.conn.search(search_base, search_filter, attributes=['cn', 'givenName', 'sn']) if self.conn.entries: print("用户查询成功,用户信息如下:") for entry in self.conn.entries: print(entry) return True else: print("未找到用户") return False except Exception as e: print(f"用户查询或验证失败: {e}") return False def get_user_dn(self, search_base, username): """ 获取用户的DN :param search_base: 搜索的基准DN :param username: 用户名 :return: 用户DN或None """ try: if not self.conn: self.conn = Connection(self.server, user=self.user_dn, password=self.password, auto_bind=True) search_filter = f"(cn={username})" self.conn.search(search_base, search_filter, attributes=['cn']) if self.conn.entries: user_dn = self.conn.entries[0].entry_dn print(f"找到用户DN: {user_dn}") return user_dn else: print("未找到用户") return None except Exception as e: print(f"获取用户DN失败: {e}") return None def verify_user_credentials(self, search_base, username, password): """ 验证用户名和密码 :param search_base: 搜索的基准DN :param username: 用户名 :param password: 用户密码 :return: 验证成功返回True,否则返回False """ user_dn = self.get_user_dn(search_base, username) if not user_dn: return False try: # 使用用户DN和密码创建一个新的连接以验证用户凭据 test_conn = Connection(self.server, user=user_dn, password=password, auto_bind=True) if test_conn.bind(): print("用户名和密码验证成功") return True else: print("用户名和密码验证失败") return False except Exception as e: print(f"验证用户名和密码失败: {e}") return False if __name__ == "__main__": ldap_host = "192.168.2.51" ldap_port = 389 admin_user_dn = "cn=********,ou=********,dc=wywr,dc=top" # 管理员账号DN admin_password = "********" # 管理员密码 test_username = "jackadam" # 要测试的用户名 test_password = "********" # 要测试的用户密码 search_base = "dc=wywr,dc=top" client = LDAPClient(ldap_host, ldap_port, admin_user_dn, admin_password) # 检查端口是否开放 if client.is_port_open(): print(f"LDAP端口 {ldap_port} 开放") # 验证LDAP服务 if client.test_ldap_service(): print("LDAP服务正常") # 列出所有用户 client.list_all_users(search_base) # 验证测试用户的用户名和密码 if client.verify_user_credentials(search_base, test_username, test_password): print("测试用户的用户名和密码验证成功") else: print("测试用户的用户名和密码验证失败") else: print("LDAP服务异常") else: print(f"LDAP端口 {ldap_port} 未开放")
注意:
公司是选的,不是建的
模板用户也是选的,如果没有模板用户,要新建。
官方说明#
LDAP 身份验证#
要在 Odoo 中配置 LDAP 身份验证:
-
打开“设置”应用程序,向下滚动到“集成”部分,然后启用 LDAP 身份验证。
-
单击 Save,然后返回 Integrations 部分并单击 LDAP Server。
-
在 Set up your LDAP Server 列表中,单击 New (新建),然后选择所需的 company 在下拉列表中。
-
在 Server information (服务器信息) 部分中,分别在 LDAP 服务器地址 和 LDAP 服务器端口 字段中输入服务器的 IP 地址和端口。
-
启用 使用 TLS 以在连接到 LDAP 时请求安全的 TLS/SSL 加密 server,前提是服务器启用了 StartTLS。
-
在 Login information (登录信息) 部分中,输入用于 在 LDAP binddn 和 LDAP password 字段中查询服务器, 分别。如果字段留空,服务器将匿名执行查询。
-
在 Process parameter (流程参数) 部分中,输入:
-
LDAP 基字段中使用 LDAP 格式的 LDAP 服务器名称 (例如,
dc=example,dc=com
); -
uid=%s
在 LDAP 过滤器字段中。
-
-
在 User information (用户信息) 部分中:
-
启用 创建用户 ,以便在有人首次登录时在 Odoo 中创建用户配置文件 使用 LDAP;
-
选择 User 模板,用于创建新用户配置文件。如果没有模板 ,则使用管理员的配置文件。
-
注解
使用 Microsoft Active Directory (AD) 进行 LDAP 身份验证时,如果用户遇到登录 问题 尽管使用了有效的凭据,但请创建新的系统参数以禁用引荐追踪 在 LDAP 客户端中:
转到
填写字段:
键:
auth_ldap.disable_chase_ref
值:
True
数据库:#
表: ir.config_parameter
key: auth_ldap.disable_chase_ref
值: True
作者:上官飞鸿
出处:https://www.cnblogs.com/jackadam/p/18527095
版权:本作品采用「知识共享-署名-非商业性-禁止演绎(CC-BY-NC-ND)」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!