存储账户和凭证
项目描述
密钥链账户
此模块允许您存储外部系统的凭证。
所有凭证都存储在一个地方:更容易管理和审计。
无需努力即可实现多账户。
为每个账户存储附加数据。
附加数据的验证规则。
为不同的环境(生产/测试/环境/等)有不同的账户。
默认情况下,密码使用存储在Odoo配置中的密钥进行加密。这远非理想的密码存储设置,但它比数据库中的明文密码要好得多。它可以很容易地替换为另一个系统。请参阅下面的“安全”章节。
账户可以是:市场(Amazon, Cdiscount, ...)、承运人(Laposte, UPS, ...)或从Odoo调用的任何第三方系统。
此模块面向开发者。选择账户的逻辑将在依赖模块中实现。
用例
对于送货的可能用例:您需要为同一承运人多个账户。这可能是因为承运人的限制(不可变的发送地址),或者业务规则(每个仓库使用不同的账户)。
配置
安装此模块后,您需要在Odoo的配置文件中添加一些条目:(etc/openerp.cfg)
> keychain_key = fyeMIx9XVPBBky5XZeLDxVc9dFKy7Uzas3AoyMarHPA=
您可以使用 python keychain/bin/generate_key.py 生成密钥。
此密钥用于加密账户密码。
如果您计划使用环境,您应该为每个环境添加一个密钥
> keychain_key_dev = 8H_qFvwhxv6EeO9bZ8ww7BUymNt3xtQKYEq9rjAPtrc=
> keychain_key_prod = y5z-ETtXkVI_ADoFEZ5CHLvrNjwOPxsx-htSVbDbmRc=
keychain_key用于无环境设置时的加密。
使用(针对模块开发)
在 __openerp__.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命名函数兼容的名称。
从生产环境切换到开发环境
你可以采用以下策略之一
使用dev密钥在生产数据库中存储你的开发账户
使用Odoo内置方法(如data.xml)导入你的开发账户(在一个专用模块中)。
使用你自己的迁移/清理脚本导入你的开发账户
等等。
注意:只有密码字段在没有正确密钥的情况下是不可读的,登录和数据字段在所有环境中都是可用的。
你也可以使用相同的技术名称和不同的环境,在运行时选择账户。
用法(对于用户)
转到设置/密钥链,创建以下记录
命名空间:账户类型(例如:LaPoste)
名称:可读标签“仓库1”
技术名称:消费者模块使用的名称(例如:“warehouse_1”)
登录:账户登录名
Password_clear:用于输入明文密码(不加密存储)
Password:加密密码,没有密钥不可读(在配置中)
Data:用于附加值的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问题上进行跟踪。在遇到问题的情况下,请检查那里是否已报告您的问题。如果您是第一个发现的,请帮助我们打破它,提供详细且受欢迎的反馈。
致谢
贡献者
Raphaël Reverdy <raphael.reverdy@akretion.com>
资助者
本模块的开发得到了以下机构的财务支持:
维护者
本模块由OCA维护。
OCA,即Odoo社区协会,是一个非营利组织,其使命是支持Odoo特性的协作开发并推广其广泛应用。
若要为此模块做出贡献,请访问https://odoo-community.org。
项目详情
哈希值 for odoo9_addon_keychain-9.0.1.0.0-py2-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b5bcbc29915cb23b679b56bd7c632efec1f7d54a33cdf95bca915807a0a81e35 |
|
MD5 | 82cbcf75822e615e5569beea547f1759 |
|
BLAKE2b-256 | 9ffeb1f3725097c0d6d7700ee1dd8bc82fe582ef6e849ddaaf8e0e2eb2f960e8 |