класс ActiveSupport::MessageEncryptors
Атрибуты
Если значение равно true, при создании шифраторов сообщений меняются местами первые два набора параметров ротации. Например, при следующей конфигурации шифраторы сообщений будут шифровать сообщения с помощью serializer: Marshal, url_safe: true и смогут расшифровывать сообщения, зашифрованные с помощью любого из трёх наборов параметров:
encryptors = ActiveSupport::MessageEncryptors.new { ... }
encryptors.rotate(serializer: JSON, url_safe: true)
encryptors.rotate(serializer: Marshal, url_safe: true)
encryptors.rotate(serializer: Marshal, url_safe: false)
encryptors.transitional = true Это может быть полезно при последовательном развёртывании приложения, когда серверы, которые ещё не были обновлены, должны по-прежнему уметь расшифровывать сообщения от обновлённых серверов. В таком случае сначала выполните последовательное развёртывание с новой ротацией (например, serializer: JSON, url_safe: true) в качестве первой ротации и transitional = true. Затем, после обновления всех серверов, выполните второе последовательное развёртывание с transitional = false.
Общедоступные методы класса
# File activesupport/lib/active_support/message_encryptors.rb, line 34
Инициализирует новый экземпляр. secret_generator должен принимать соль и именованный аргумент secret_length и возвращать подходящий секрет (строку) или секреты (массив строк). secret_generator также может принимать другие произвольные именованные аргументы. Если rotate вызывается с параметрами, совпадающими с этими именованными аргументами, они передаются в secret_generator, а не в шифратор сообщений.
encryptors = ActiveSupport::MessageEncryptors.new do |salt, secret_length:, base:| MySecretGenerator.new(base).generate(salt, secret_length) end encryptors.rotate(base: "...")
Общедоступные методы экземпляра
# File activesupport/lib/active_support/message_encryptors.rb, line 54
Возвращает MessageEncryptor, настроенный с секретом, полученным из указанной salt, и параметрами из rotate. Экземпляры MessageEncryptor кэшируются, поэтому для одного и того же salt будет возвращён один и тот же экземпляр.
# File activesupport/lib/active_support/message_encryptors.rb, line 65
Заменяет экземпляр MessageEncryptor, связанный с указанной salt.
# File activesupport/lib/active_support/message_encryptors.rb, line 163
Очищает список наборов параметров.
# File activesupport/lib/active_support/message_encryptors.rb, line 172
Задаёт обратный вызов, который выполняется при расшифровке сообщения с помощью набора параметров, отличного от первого.
Например, этот обратный вызов может вести журнал при каждом вызове и тем самым показывать, используются ли ещё старые наборы параметров или их можно удалить из ротации.
# File activesupport/lib/active_support/message_encryptors.rb, line 126
Работает так же, как rotate, но добавляет указанные параметры или блок в начало списка наборов параметров.
Это может быть полезно, если у вас уже есть настроенный экземпляр MessageEncryptors, но вы хотите переопределить способ шифрования сообщений.
module ThirdParty
ENCRYPTORS = ActiveSupport::MessageEncryptors.new { ... }.
rotate(serializer: Marshal, url_safe: true).
rotate(serializer: Marshal, url_safe: false)
end
ThirdParty.ENCRYPTORS.prepend(serializer: JSON, url_safe: true)
# Uses `serializer: JSON, url_safe: true`.
# Falls back to `serializer: Marshal, url_safe: true` or
# `serializer: Marshal, url_safe: false`.
ThirdParty.ENCRYPTORS[:foo] # File activesupport/lib/active_support/message_encryptors.rb, line 74
Добавляет options в список наборов параметров. Шифрование Messages выполняется с использованием первого набора в списке. При расшифровке, однако, наборы проверяются по очереди, пока один из них не сработает.
Важно отметить, что параметр :secret_generator может задавать генератор секретов, отличный от указанного изначально. Генератор секретов должен поддерживать call, принимать соль и именованный аргумент secret_length и возвращать подходящий секрет (строку) или секреты (массив строк). Генератор секретов также может принимать другие произвольные именованные аргументы.
Если какие-либо параметры совпадают с именованными аргументами используемого генератора секретов, они передаются генератору секретов, а не шифратору сообщений.
Для настройки ротации отдельно для каждой соли поддерживается вариант с блоком. Блоку передаётся соль, и он должен возвращать подходящий набор параметров в виде Hash. Блок также может возвращать nil, указывая, что ротация не применяется к данной соли. Например:
encryptors = ActiveSupport::MessageEncryptors.new { ... }
encryptors.rotate do |salt|
case salt
when :foo
{ serializer: JSON, url_safe: true }
when :bar
{ serializer: Marshal, url_safe: true }
end
end
encryptors.rotate(serializer: Marshal, url_safe: false)
# Uses `serializer: JSON, url_safe: true`.
# Falls back to `serializer: Marshal, url_safe: false`.
encryptors[:foo]
# Uses `serializer: Marshal, url_safe: true`.
# Falls back to `serializer: Marshal, url_safe: false`.
encryptors[:bar]
# Uses `serializer: Marshal, url_safe: false`.
encryptors[:baz] # File activesupport/lib/active_support/message_encryptors.rb, line 154
Вызывает rotate со стандартными параметрами.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.