【问题标题】:How to encrypt a JSON payload in Faraday (Rails 5)如何在 Faraday (Rails 5) 中加密 JSON 有效负载
【发布时间】:2019-03-19 05:07:43
【问题描述】:

我对 Rails 有点陌生,并且使用 Faraday gem 进行 API 调用,所以请保持温和。 :)

我们在 Rails 应用程序中对所有服务器发起的 API 调用使用 Faraday (gem)。我们使用的其中一项外部服务要求我们使用服务提供商提供的 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 属性后直接加密它,或者是否有一种更系统的方法来做同样的事情。

非常感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails json ruby ruby-on-rails-5 faraday


    【解决方案1】:

    是的,为什么不呢?我可能会遗漏一些东西。

    您可以加密任何字符串并通过请求正文传递它。但是,如果您这样做,您可能希望根据您的 application/json 标头保持适当的内容类型。

    JSON:

    { 
         name: "Alice", 
         age: 25 
    }
    

    我们可以加密每个单独的键值对:

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

    或者我们可以加密整个 JSON 块:

    { 
         secret: W29Ud80egkye98VZlqCrrRvFITw5TnFwGHCB0+8= 
    }
    

    我将加密的 JSON 包装在更多的 JSON 中,这样我们就不会破坏内容类型。但我不确定您的第 3 方服务是否具备解密整个块的能力,或者它是否在 JSON 中查找特定的键值对并对其进行解密。这是重要的区别。您几乎可以加密任何东西并通过网络传送,但如果侦听器不具备以该格式解密您的数据的条件,您就不得不遵守它们的格式。

    【讨论】:

    • 是的,这行得通!原来我得到的错误是因为使用了错误的加密密钥,而不是因为与法拉第有任何关系。感谢您的宝贵时间!
    猜你喜欢
    • 2016-03-12
    • 2020-06-17
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 2020-08-03
    • 1970-01-01
    • 2019-01-23
    相关资源
    最近更新 更多