跳转到主要内容

存储账户和凭证

项目描述

License: AGPL-3

密钥链账户

此模块允许您存储外部系统的凭证。

  • 所有凭证都存储在一个地方:更容易管理和审计。

  • 无需努力即可实现多账户。

  • 为每个账户存储附加数据。

  • 附加数据的验证规则。

  • 为不同的环境(生产/测试/环境/等)有不同的账户。

默认情况下,密码使用存储在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或空白(所有)

Try me on Runbot

已知问题/路线图

  • 默认情况下不支持账户继承(如为所有环境定义公共设置)

  • 适配用于与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问题上进行跟踪。在遇到问题的情况下,请检查那里是否已报告您的问题。如果您是第一个发现的,请帮助我们打破它,提供详细且受欢迎的反馈。

致谢

Akretion

贡献者

资助者

本模块的开发得到了以下机构的财务支持:

维护者

Odoo Community Association

本模块由OCA维护。

OCA,即Odoo社区协会,是一个非营利组织,其使命是支持Odoo特性的协作开发并推广其广泛应用。

若要为此模块做出贡献,请访问https://odoo-community.org

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

此版本没有可用的源代码分发文件。请参阅生成分发存档的教程

构建分发

odoo9_addon_keychain-9.0.1.0.0-py2-none-any.whl (19.8 kB 查看哈希值)

上传时间 Python 2

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面