Ruby on rails 在Ruby中保护后台作业中的密码

Ruby on rails 在Ruby中保护后台作业中的密码,ruby-on-rails,ruby,encryption,Ruby On Rails,Ruby,Encryption,我有一个访问令牌,它作为ENV变量加密存储在服务器上。当有人想要生成报告时,他们发送一个密码,用于解密加密的访问令牌(当前使用ActiveSupport::MessageEncryptor),然后使用访问令牌向生成报告所需的第三方进行一些API调用 我遇到的问题是,对第三方的网络API调用很慢(几分钟),导致web请求超时。该项目集成了Sidekiq+ActiveJob,我认为将作业排队会很好(这样运行速度慢就不重要了) 我现在不清楚如何正确处理密码。我不能使用密码作为作业的参数(因为它会存储在

我有一个访问令牌,它作为ENV变量加密存储在服务器上。当有人想要生成报告时,他们发送一个密码,用于解密加密的访问令牌(当前使用
ActiveSupport::MessageEncryptor
),然后使用访问令牌向生成报告所需的第三方进行一些API调用

我遇到的问题是,对第三方的网络API调用很慢(几分钟),导致web请求超时。该项目集成了Sidekiq+ActiveJob,我认为将作业排队会很好(这样运行速度慢就不重要了)


我现在不清楚如何正确处理密码。我不能使用密码作为作业的参数(因为它会存储在Redis中)。同样地,我不能放置解密的访问令牌(出于同样的原因)。我有什么选择吗?如果第三方允许我通过quick API将加密的访问密钥转换为有限使用/过期密钥,我可以在排队之前完成,但我不认为这是一个选项。还有其他选择吗?

Sidekiq Enterprise支持加密的工作数据,旨在完全解决您的问题


他们能否提供使用公钥加密的密码,以便只有您的本地私钥才能对其进行解码?@tadman不确定这有什么帮助。私钥可以存储在哪里?有没有可能阻止有权访问作业数据的人(使用公钥/私钥所需的任何参数排队)稍后进行未经授权的API调用,因为他们拥有加密的访问令牌?除非您在单独的计算机上运行它,后台作业可能会访问与调用方相同的运行时环境(至少对于Sidekiq或Resque)。因此,无需将其作为参数传递或以其他方式存储在Redis中。例如,您可以从环境变量或文件中检索它。您必须严格锁定具有访问该私钥权限的工作计算机,但无论您做什么,您都必须以这种方式保护某些内容。我以为你想从诸如Redis之类的潜在共享资源中获取密码。@maxple在Heroku上运行,使用API dynos中的独立工作动态(服务器)。非常感谢您编写Sidekiq。感谢您的回复!