2017-01-12 2 views
2

У меня есть токен доступа, который хранится в зашифрованном виде как переменная ENV на сервере. Когда кто-то хочет сгенерировать отчет - они отправляют пароль, который используется для дешифрования зашифрованного токена доступа (в настоящее время используется ActiveSupport::MessageEncryptor), тогда токен доступа используется для совершения некоторых вызовов API третьей стороне, необходимой для создания отчета.Защита пароля в фоновом режиме Работа в Ruby

Проблема, с которой я столкнулся, - это вызов API сети третьим лицам медленный (несколько минут) и вызвавший веб-запросы к таймауту. В проекте интегрирован Sidekiq + ActiveJob, и я подумал, что было бы здорово поставить в очередь работу (тогда медленное время выполнения не будет иметь значения).

Теперь я не понимаю, как правильно обрабатывать пароль. Я не могу использовать пароль в качестве аргумента для задания (так как он затем сохраняется в Redis). Аналогично, я не могу поместить расшифрованный токен доступа (по той же причине). Есть ли у меня какие-либо варианты? Если третья сторона позволила мне преобразовать зашифрованный ключ доступа в ограниченный ключ использования/истечения срока действия с помощью быстрого API, я мог бы сделать это до размещения в очереди, но я не верю, что это вариант. Любые другие варианты?

+0

Могли ли они ввести пароль, где это было зашифровано с помощью открытого ключа, так только ваш местный частный ключ может расшифровать его? – tadman

+0

@tadman не уверен, как это помогает. Где можно хранить секретный ключ? Можно ли запретить кому-либо доступ к данным о работе (с указанием любых параметров, необходимых для открытых/закрытых ключей), после того, как вы совершили несанкционированные вызовы API, учитывая, что у них есть зашифрованный токен доступа? – Stussa

+3

Если вы не запускаете его на отдельной машине, фоновые задания, вероятно, будут иметь доступ к той же среде выполнения, что и вызывающий (по крайней мере, для Sidekiq или Resque). Поэтому нет необходимости передавать его в качестве параметра или иным образом хранить его в Redis. Вы можете получить его из переменной среды, например, или файла. –

ответ

0

Sidekiq Enterprise поддерживает зашифрованные данные о заданиях, предназначенные для решения именно той проблемы, которая у вас есть.

https://github.com/mperham/sidekiq/wiki/Ent-Encryption

+0

Большое спасибо за создание Sidekiq. Цените свой ответ! – Stussa

Смежные вопросы