存储账户和凭证
项目描述
密钥链账户
本模块允许您存储外部系统的凭证。
所有凭证都存储在一个地方:更容易管理和审计。
轻松实现多账户。
为每个账户存储附加数据。
附加数据的验证规则。
为不同的环境(生产/测试/环境/等)使用不同的账户。
默认情况下,密码使用存储在Odoo配置文件中的密钥进行加密。这远非理想的密码存储配置,但比数据库中的明文密码要好得多。它可以很容易地替换为另一个系统。请参阅下面的“安全”章节。
账户可以是:市场(亚马逊、Cdiscount、…)、运输公司(La Poste、UPS、…)或从Odoo调用的任何第三方系统。
本模块面向开发者。选择账户的逻辑将在相关模块中实现。
用例
交付的可能用例:您需要为同一承运人设置多个账户。这可能是由于承运人限制(不可变的发送地址)或业务规则(每个仓库使用不同的账户)。
配置
安装此模块后,您需要在Odoo的配置文件中添加一些条目:(etc/openerp.cfg)
> keychain_key = fyeMIx9XVPBBky5XZeLDxVc9dFKy7Uzas3AoyMarHPA=
您可以使用以下命令生成密钥:python -c 'from cryptography.fernet import Fernet; print Fernet.generate_key()'。
此密钥用于加密账户密码。
如果您计划使用环境,您应该为每个环境添加一个密钥
> keychain_key_dev = 8H_qFvwhxv6EeO9bZ8ww7BUymNt3xtQKYEq9rjAPtrc=
> keychain_key_prod = y5z-ETtXkVI_ADoFEZ5CHLvrNjwOPxsx-htSVbDbmRc=
keychain_key用于无环境设置时的加密。
使用方法(适用于模块开发)
在__manifest__.py中将此密钥链添加为依赖项
继承 keychain.account 子类并在命名空间中添加您的模块:(命名空间名称见下文)
class LaposteAccount(models.Model):
_inherit = 'keychain.account'
namespace = fields.Selection(
selection_add=[('roulier_laposte', 'Laposte')])
添加默认数据(作为字典)
class LaposteAccount(models.Model):
# ...
def _roulier_laposte_init_data(self):
return {
"agencyCode": "",
"recommandationLevel": "R1"
}
实现用户输入数据的验证
class LaposteAccount(models.Model):
# ...
def _roulier_laposte_validate_data(self, data):
return len(data.get("agencyCode") > 3)
在您的代码中获取账户
import random
def _get_auth(self):
keychain = self.env['keychain.account']
if self.env.user.has_group('stock.group_stock_user'):
retrieve = keychain.suspend_security().retrieve
else:
retrieve = keychain.retrieve
accounts = retrieve(
[['namespace', '=', 'roulier_laposte']])
account = random.choice(accounts)
return {
'login': account.login,
'password': account.get_password()
}
在此示例中,随机选择一个账户。通常,这应根据每个客户的特定规则设置。
您必须使用 suspend_security() 函数限制对您的方法的用户访问。
警告:_init_data 和 _validate_data 应以您的命名空间为前缀!选择兼容 Python 命名函数的名称。
从生产环境切换到开发环境
您可以选择以下策略之一
使用开发密钥在生产数据库中存储您的开发账户
使用 Odoo 内置方法导入您的开发账户,如 data.xml(在专用模块中)。
使用您自己的迁移/清理脚本来导入您的开发账户
等等。
注意:只有密码字段在没有适当密钥的情况下才不可读,登录和数据字段在所有环境中都可用。
您还可以使用相同的 技术名称 和不同的 环境 来在运行时选择账户。
用法(针对用户)
转到 设置 / 密钥链,创建以下记录
命名空间:账户类型(例如:Laposte)
名称:可读标签“仓库1”
技术名称:消费者模块使用的名称(例如:“warehouse_1”)
登录:账户登录名
密码_clear:用于输入明文密码(不加密存储)
密码:加密后的密码,没有密钥不可读(在配置中)
数据:附加值的 JSON 字符串(账户的附加配置,例如:{“agencyCode”: “Lyon”, “insuranceLevel”: “R1”})
环境:通常是 prod 或 dev 或空白(对于所有)
已知问题/路线图
默认情况下不支持账户继承(例如定义所有环境的通用设置)
适配与 server_environnement 模块一起使用
密钥过期或轮换应手动完成
从 data.xml 导入密码
安全
此讨论:https://github.com/OCA/server-tools/pull/644 可帮助您决定此模块是否适合您的需求。
常识:Odoo 不是存储敏感数据的安全地方。但有时您别无选择。此模块旨在存储数据如承运人账户、smtp、API 密钥等的凭据,但绝对不是用于信用卡号、医疗记录等。
默认情况下,密码以对称加密 Fernet 加密存储在数据库中。加密密钥存储在 openerp.tools.config 中。
即使在安装此模块的情况下也存在威胁
未经授权的 Odoo 用户想要访问数据:访问被 Odoo 安全规则拒绝
授权的 Odoo 用户尝试使用 rpc api 访问数据:他得到加密的密码,他无法恢复,因为密钥和解密密码没有通过 rpc 暴露
数据库被盗:没有密钥,目前恢复密码相当困难
Odoo 被破坏(恶意模块或漏洞):黑客可以访问 Python 并对 Odoo 做他想做的事情:可以轻松解密当前环境的密码
服务器被破坏:相同
如果您的开发服务器被破坏,黑客无法解密您的生产密码,因为您在开发和生产之间有不同的密钥。
如果您想要更安全的东西:不要在 Odoo 中存储任何敏感数据,使用外部系统作为代理,您仍然可以使用此模块来存储与您的账户相关的所有其他数据。
错误跟踪器
错误在 GitHub Issues 上跟踪。如果在出现问题时,请检查您的问题是否已被报告。如果您是第一个发现它的人,请帮助我们将其砸碎,提供详细且受欢迎的反馈。
鸣谢
贡献者
拉斐尔·雷维迪 <raphael.reverdy@akretion.com>
资助者
本模块的开发得到了以下机构的财务支持
Akretion
维护者
本模块由OCA维护。
OCA,或Odoo社区协会,是一个非营利组织,其使命是支持Odoo功能的协作开发并推广其广泛使用。
若想为此模块做出贡献,请访问 https://odoo-community.org。
项目详情
哈希值 for odoo10_addon_keychain-10.0.2.0.2-py2-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 096243812c4b8e87a8b957a6e8f9e5f427b5ed34ec55c390810f950a5e61c188 |
|
MD5 | 5e9698595fa63bd862dbef2908fbb4ae |
|
BLAKE2b-256 | e4355ff443f291fc2b5d27c63999d444f16e072f19d9cbef997a35a8bea9de42 |