Loading

Odoo 连接ldap 域认证

 附一个验证ldap的python代码。

from ldap3 import Server, Connection, ALL, NTLM, SUBTREE, Tls
from ldap3.core.exceptions import LDAPExceptionError

class CompanyLDAP:
    def __init__(self, ldap_server, ldap_server_port, ldap_binddn, ldap_password, ldap_base, ldap_filter, ldap_tls):
        self.ldap_server = ldap_server
        self.ldap_server_port = ldap_server_port
        self.ldap_binddn = ldap_binddn
        self.ldap_password = ldap_password
        self.ldap_base = ldap_base
        self.ldap_filter = ldap_filter
        self.ldap_tls = ldap_tls

    def _connect(self):
        try:
            server = Server(self.ldap_server, port=self.ldap_server_port, use_ssl=self.ldap_tls, get_info=ALL)
            conn = Connection(server, user=self.ldap_binddn, password=self.ldap_password, auto_bind=True)
            print('Successfully connected to LDAP server.')
            return conn
        except LDAPBindError as e:
            print('LDAP bind failed: %s', e)
        except LDAPSocketOpenError as e:
            print('Failed to open socket to LDAP server: %s', e)
        except LDAPException as e:
            print('An LDAP exception occurred: %s', e)
        except Exception as e:
            print('An unexpected error occurred: %s', e)
        return None

    def _authenticate(self, login, password):
        if not password:
            return False

        conn = self._connect()
        if not conn:
            return False

        search_filter = self.ldap_filter % login
        conn.search(self.ldap_base, search_filter, search_scope=SUBTREE, attributes=['cn'])

        if len(conn.entries) != 1:
            return False

        user_dn = conn.entries[0].entry_dn
        try:
            user_conn = Connection(conn.server, user=user_dn, password=password, auto_bind=True)
            user_conn.unbind()
            return True
        except LDAPExceptionError:
            return False

# Example usage
# LDAP连接参数
ldap_config = CompanyLDAP(
    ldap_server='192.168.2.51',
    ldap_server_port=389,
    ldap_binddn='cn=odooadmin,ou=LdapUsers,dc=wywr,dc=top',
    ldap_password='12345678',
    ldap_base='dc=wywr,dc=top',
    ldap_filter='(&(objectCategory=person)(objectClass=user)(sAMAccountName=%s))',
    ldap_tls=False
)

# 验证LDAP连接,账号密码
is_authenticated = ldap_config._authenticate('jackadam', '12345678')
print("Authenticated:", is_authenticated)

 

 

注意:

公司是选的,不是建的

模板用户也是选的,如果没有模板用户,要新建。

 
错误:
 LdapErr: DSID-0C090CF8, comment: In order to perform this operation a successful bind must be completed on the connection.

 

官方说明

LDAP 身份验证

要在 Odoo 中配置 LDAP 身份验证:

  1. 打开“设置”应用程序,向下滚动到“集成”部分,然后启用 LDAP 身份验证。

  2. 单击 Save,然后返回 Integrations 部分并单击 LDAP Server。

  3. 在 Set up your LDAP Server 列表中,单击 New (新建),然后选择所需的 company 在下拉列表中。

  4. 在 Server information (服务器信息) 部分中,分别在 LDAP 服务器地址 和 LDAP 服务器端口 字段中输入服务器的 IP 地址和端口。

  5. 启用 使用 TLS 以在连接到 LDAP 时请求安全的 TLS/SSL 加密 server,前提是服务器启用了 StartTLS。

  6. 在 Login information (登录信息) 部分中,输入用于 在 LDAP binddn 和 LDAP password 字段中查询服务器, 分别。如果字段留空,服务器将匿名执行查询。

  7. 在 Process parameter (流程参数) 部分中,输入:

    • LDAP 基字段中使用 LDAP 格式的 LDAP 服务器名称 (例如,dc=example,dc=com);

    • uid=%s在 LDAP 过滤器字段中。

  8. 在 User information (用户信息) 部分中:

    • 启用 创建用户 ,以便在有人首次登录时在 Odoo 中创建用户配置文件 使用 LDAP;

    • 选择 User 模板,用于创建新用户配置文件。如果没有模板 ,则使用管理员的配置文件。

注解

使用 Microsoft Active Directory (AD) 进行 LDAP 身份验证时,如果用户遇到登录 问题 尽管使用了有效的凭据,但请创建新的系统参数以禁用引荐追踪 在 LDAP 客户端中:

  1. 激活开发人员模式。

  2. 转到 设置 ‣ 技术 ‣ 系统参数 ,然后单击 新建 。

  3. 填写字段:

    • 键:auth_ldap.disable_chase_ref

    • 值:True

数据库:

表: ir.config_parameter

key: auth_ldap.disable_chase_ref

值: True

 

posted @ 2024-11-05 07:28  上官飞鸿  阅读(40)  评论(0编辑  收藏  举报