odoo自带的auth_ldap模块虽然实现了ldap统一账户的验证,但如果用户一旦修改密码就变成同名的本地用户。这是因为odoo默认先验证本地res.users信息,如果没有记录,或者有记录但密码字段为空才会去ldap服务器验证
根据其原理,可以在修改密码的时候对接上ldap的密码信息就完美了,但用modify指令写入的userPassword值是原文存储,即明文直接写入在服务器也是明文,这就需要在请求端预先加密成ldap标准的密文格式
网上看到有很多php的实现都是要写点代码什么的,照葫芦折腾几下才发现python的passlib库居然有现成拿来即用的函数
|
>>> from passlib.hash import ldap_salted_sha1 as ssha >>> ssha.encrypt("test", salt_size=16) '{SSHA}tiULq3HOY1XRLW+bjGkHe3awnZCHcE5JSam1tnaOce49B4Dw' |
以此类推
|
>>> import passlib.hash >>> dir(passlib.hash) ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__format__', '__getattr__', '__getattribute__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__package__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'apr_md5_crypt', 'atlassian_pbkdf2_sha1', 'bcrypt', 'bcrypt_sha256', 'bigcrypt', 'bsd_nthash', 'bsdi_crypt', 'cisco_pix', 'cisco_type7', 'crypt16', 'cta_pbkdf2_sha1', 'des_crypt', 'django_bcrypt', 'django_bcrypt_sha256', 'django_des_crypt', 'django_disabled', 'django_pbkdf2_sha1', 'django_pbkdf2_sha256', 'django_salted_md5', 'django_salted_sha1', 'dlitz_pbkdf2_sha1', 'fshp', 'grub_pbkdf2_sha512', 'hex_md4', 'hex_md5', 'hex_sha1', 'hex_sha256', 'hex_sha512', 'htdigest', 'ldap_bcrypt', 'ldap_bsdi_crypt', 'ldap_des_crypt', 'ldap_hex_md5', 'ldap_hex_sha1', 'ldap_md5', 'ldap_md5_crypt', 'ldap_pbkdf2_sha1', 'ldap_pbkdf2_sha256', 'ldap_pbkdf2_sha512', 'ldap_plaintext', 'ldap_salted_md5', 'ldap_salted_sha1', 'ldap_sha1', 'ldap_sha1_crypt', 'ldap_sha256_crypt', 'ldap_sha512_crypt', 'lmhash', 'md5_crypt', 'msdcc', 'msdcc2', 'mssql2000', 'mssql2005', 'mysql323', 'mysql41', 'nthash', 'oracle10', 'oracle11', 'pbkdf2_sha1', 'pbkdf2_sha256', 'pbkdf2_sha512', 'phpass', 'plaintext', 'postgres_md5', 'roundup_plaintext', 'scram', 'sha1_crypt', 'sha256_crypt', 'sha512_crypt', 'sun_md5_crypt', 'unix_disabled', 'unix_fallback'] |
其中ldap_bcrypt,ldap_bsdi_crypt,ldap_des_crypt,ldap_hex_md5,ldap_hex_sha1,ldap_md5,ldap_md5_crypt,ldap_pbkdf2_sha1,ldap_pbkdf2_sha256,ldap_pbkdf2_sha512,ldap_plaintext,ldap_salted_md5,ldap_salted_sha1,ldap_sha1,ldap_sha1_crypt,ldap_sha256_crypt,ldap_sha512_crypt等都是ldap加密相关的兄弟函数,可谓是应有尽有非常丰富,看来在odoo端直接集成phpLDAPadmin里各种类型的加密密码更新都是易事了