{"id":2288,"date":"2017-04-19T11:25:10","date_gmt":"2017-04-19T11:25:10","guid":{"rendered":"https:\/\/esferas.org\/msqlu\/?p=2288"},"modified":"2017-04-19T11:54:29","modified_gmt":"2017-04-19T11:54:29","slug":"conectando-odoo-con-un-directorio-ldap","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2017\/04\/19\/conectando-odoo-con-un-directorio-ldap\/","title":{"rendered":"Conectando odoo con un directorio LDAP &#8230;"},"content":{"rendered":"<p>&#8230; se sufre lo suyo, pero termina por funcionar.<\/p>\n<p><!--more--><\/p>\n<p>La idea no es nueva. Tenemos un directorio de usuarios central con el que se identifican en la red de la empresa. Tenemos un ERP moderno y cuqui y queremos (quiero, m\u00e1s bien) que para acceder a \u00e9l los usuarios empleen la misma contrase\u00f1a que en el resto de los equipos y aplicaciones.<\/p>\n<p>El directorio de usuarios funciona con <a href=\"https:\/\/esferas.org\/msqlu\/2016\/09\/20\/ldap-y-cuentas-de-usuarios\/\">openLDAP<\/a>, el ERP es <a href=\"https:\/\/www.odoo.com\/es_ES\/\">odoo<\/a>, y existe un <a href=\"https:\/\/www.odoo.com\/apps\/online\/auth_ldap\/\">complemento<\/a> para \u00e9ste que permite que, dentro de una empresa en concreto (puede gestionar varias), los usuarios se tengan que validar con el citado directorio.<\/p>\n<p>El principal escollo que me he encontrado es justamente c\u00f3mo funciona el invento:<\/p>\n<ol>\n<li>Utiliza la direcci\u00f3n de correo en lugar del identificador de usuario (esto es cosa de odoo, que tomaron la decisi\u00f3n de emplear el correo como identificador).<\/li>\n<li>Valida primero contra la base de datos interna <strong>si tiene definida una contrase\u00f1a<\/strong>.<\/li>\n<li>Intenta conectar con el directorio LDAP como \u00faltimo recurso.<\/li>\n<li>odoo no permite anular una contrase\u00f1a desde la aplicaci\u00f3n. Cambiarla s\u00ed, pero no anularla.<\/li>\n<\/ol>\n<p>Con cualquier cuenta nueva no hay problema. Se asegura uno de que la direcci\u00f3n de correo corresponda con la que hay en el directorio LDAP y se olvida de asignarle contrase\u00f1a. odoo no almacenar\u00e1 esa informaci\u00f3n si la validaci\u00f3n externa tiene \u00e9xito. Eso que ganamos.<\/p>\n<p>\u00bf Y qu\u00e9 hacemos con los usuarios que ya existen ? Pues ir por las bravas. Conectar a muy bajo nivel con la base de datos, localizar la tabla correspondiente y anular el valor de la columna de la contrase\u00f1a. Entonces s\u00ed, entonces odoo se olvidar\u00e1 de verificar en sus tablas y pasar\u00e1 a hacerlo \u00fanicamente con el complemento LDAP.<\/p>\n<h3>Anular contrase\u00f1as por las bravas<\/h3>\n<p>Asumiendo que la base de datos se llama <em>test_cce_ldap<\/em> el proceso es el siguiente:<\/p>\n<pre class=\"lang:default decode:true\">$ sudo -u postgres psql postgres\r\npsql (9.5.4, server 9.5.5)\r\nType \"help\" for help.\r\n\r\npostgres=# \\c test_cce_ldap\r\npsql (9.5.4, server 9.5.5)\r\nYou are now connected to database \"test_cce_ldap\" as user \"postgres\".\r\ntest_cce_ldap=# update res_users set password_crypt = null where login = 'xxxx@ejemplo.net?;\r\nUPDATE 1\r\ntest_cce_ldap=# \r\n\r\n<\/pre>\n<p>En el paso a producci\u00f3n ser\u00e1 necesario hacerlo con todos los usuarios que tengan algo en la columna <em>pasword_crypt,<\/em> para que a partir de ese momento tengan que acreditarse con sus credenciales habituales.<\/p>\n<h3>Configurar el complemento LDAP en odoo<\/h3>\n<p>Para definir los par\u00e1metros del m\u00f3dulo se debe acceder a la ficha de la compa\u00f1\u00eda y editar la pesta\u00f1a de configuraci\u00f3n. Admite varios directorios LDAP y aunque en la documentaci\u00f3n no dice nada sobre el orden de consulta asumo que el campo <em>Secuencia<\/em> tendr\u00e1 algo que ver.<\/p>\n<p><a href=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/04\/Selecci\u00f3n_129.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2292 size-large\" src=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/04\/Selecci\u00f3n_129-1024x354.png\" alt=\"\" width=\"1024\" height=\"354\" srcset=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/04\/Selecci\u00f3n_129-1024x354.png 1024w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/04\/Selecci\u00f3n_129-300x104.png 300w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/04\/Selecci\u00f3n_129-768x265.png 768w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/04\/Selecci\u00f3n_129.png 1143w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Si el directorio LDAP lo permite se puede hacer conexiones <em>bind<\/em> directas seg\u00fan lo que el usuario proporcione. Las credenciales <em>binddn<\/em> son para que compruebe que el usuario exista antes de intentar validar su contrase\u00f1a. Algo que puede venir bien en ciertos entornos pero que en mi caso me es indiferente.<\/p>\n<p>El filtro LDAP est\u00e1 buscando exactamente por el campo <em>mail<\/em>. He intentado forzarlo para que comprobase \u00fanicamente con el campo <em>uid<\/em> pero parece que me he pasado de listo y si no es un correo como que no.<\/p>\n<p>Tambi\u00e9n dispone de la opci\u00f3n de crear usuarios autom\u00e1ticamente cuando validan correctamente contra el directorio LDAP, con la oportunidad de crearles un perfil determinado de usuario pero he desechado la idea casi de inmediato. Como tengo otros usuarios de sistema dados de alta en el directorio tendr\u00eda que complicar m\u00e1s el filtro de b\u00fasqueda para excluirlos.<\/p>\n<p>Por ahora todo bien &#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; se sufre lo suyo, pero termina por funcionar.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[2],"tags":[18,335,594],"class_list":["post-2288","post","type-post","status-publish","format-standard","hentry","category-software","tag-administracion-de-sistemas","tag-ldap","tag-odoo"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/2288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=2288"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/2288\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=2288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=2288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=2288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}