Как зашифровать полезную нагрузку JSON в Faraday (Rails 5)

Я немного новичок в Rails и использую гем Фарадея для вызовов API, поэтому будьте осторожны. :)

Мы используем Faraday (gem) для всех наших серверных вызовов API в нашем приложении Rails. Одна из используемых нами внешних служб требует, чтобы мы шифровали все наши полезные нагрузки с помощью открытого ключа RSA 4096, предоставленного поставщиком услуг.

Обычно мы используем Фарадея следующим образом:

connection = Faraday.new(:url: url) do |faraday|
    faraday.request :url_encoded
    faraday.response :logger       
    faraday.adapter  Faraday.default_adapter  
end

parameters = '{
    "key1": "value1"
    "key2":XXXXXX,
    .
    .

}'

response = connection.post do |req|
    req.url some_url
    req.headers['Content-Type'] = 'application/json'
    req.body = <encrypted JSON parameters given in **parameters**>
end

Я хотел знать, можем ли мы напрямую зашифровать объект parameters после преобразования его в JSON и передачи его в атрибуте req.body, или есть более систематический способ сделать то же самое.

Заранее большое спасибо за помощь!


person Sreeram N R    schedule 19.03.2019    source источник


Ответы (1)


Да, почему бы и нет? Я могу что-то упустить.

Вы можете зашифровать любую строку и передать ее через тело запроса. Однако, если вы это сделаете, вы, вероятно, захотите остаться в пределах правильных типов контента в соответствии с вашим заголовком application/json.

JSON:

{ 
     name: "Alice", 
     age: 25 
}

Мы могли бы зашифровать каждую отдельную пару ключ-значение:

{ 
     name: gtLHeq+OR9JDvAlTFN98VZlqCrrRvFITw5TnFwGHCB0+8=, 
     age: gt9gI3dSssl5BOcSpYr0egkye98VZlqCrrRvFITw5TnFwGHCB0+8= 
}

Или мы могли бы зашифровать весь блок JSON:

{ 
     secret: W29Ud80egkye98VZlqCrrRvFITw5TnFwGHCB0+8= 
}

Я завернул зашифрованный JSON в большее количество JSON, чтобы мы не нарушили тип контента. Но я не уверен, что ваш сторонний сервис может расшифровать весь блок или он ищет определенные пары ключ-значение в JSON и расшифровывает их. Это важное различие. Вы можете зашифровать почти все что угодно и отправить его по сети, но если слушатель не настроен расшифровывать ваши данные в этом формате, вы вынуждены соответствовать его формату.

person Veridian Dynamics    schedule 19.03.2019
comment
Да, это работает! Оказывается, ошибка, которую я получал, была связана с использованием неправильного ключа шифрования, а не с Фарадеем. Спасибо за ваше время! - person Sreeram N R; 20.03.2019