在Magento中存储第三方服务凭据的“正确”位置在哪里


Where is the ‘correct’ location to store credentials for third-party services in Magento?

我正在实现一个连接到第三方API的Magento扩展。我是Magento的新手,但总体上熟悉MVC系统。

我的问题很简单,"在哪里(以及如何?我是否应该存储用于访问此第三方 API 的凭据?我可以创建一个数据库表并将它们存储在那里,但这感觉有点矫枉过正。我看到有人提到使用Magento缓存作为键/值存储,但这听起来太脆弱了。我注意到Magento似乎有某种配置对象(还没有真正深入研究(,也许这是我最好的选择?

其中哪一个(如果有的话(是"正确的"?从长远来看,哪个会让我头痛最少?

不用说,我需要对这些凭据进行盐/哈希处理,但我想同样的问题也适用于"我应该在哪里存储盐"?

Magento的典型做法是将它们存储在数据库中。可以通过扩展中的代码定义数据库字段和用户界面以维护这些凭据。

核心代码库中的一个完美示例是运输商模块。看看app/code/core/Mage/Usa/etc/config.xml

...
<fedex>
    <account backend_model="adminhtml/system_config_backend_encrypted"/>
    <meter_number backend_model="adminhtml/system_config_backend_encrypted"/>
    <key backend_model="adminhtml/system_config_backend_encrypted"/>
    <password backend_model="adminhtml/system_config_backend_encrypted"/>
    ...
</fedex>
...

通过以这种方式存储凭据,这些字段将在Magento的管理部分中可用,业务用户可以在其中输入或更新凭据,并且它们将作为加密值存储在数据库中。您可以使用 Mage::getStoreConfig('carriers/fedex/account') 在代码中访问它们。希望这能让你指向正确的方向。