ruby-on-rails - 如何在 Faraday (Rails 5) 中加密 JSON 有效负载
问题描述
我对 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
我想知道我们是否可以在将参数对象转换为 JSON 并将其传递到req.body属性后直接加密它,或者是否有更系统的方法来做同样的事情。
非常感谢您的帮助!
解决方案
是的,为什么不?我可能会遗漏一些东西。
您可以加密任何字符串并通过请求正文传递它。但是,如果您这样做,您可能希望根据您的 application/json 标头保持正确的内容类型。
JSON:
{
name: "Alice",
age: 25
}
我们可以加密每个单独的键值对:
{
name: gtLHeq+OR9JDvAlTFN98VZlqCrrRvFITw5TnFwGHCB0+8=,
age: gt9gI3dSssl5BOcSpYr0egkye98VZlqCrrRvFITw5TnFwGHCB0+8=
}
或者我们可以加密整个 JSON 块:
{
secret: W29Ud80egkye98VZlqCrrRvFITw5TnFwGHCB0+8=
}
我将加密的 JSON 包裹在更多的 JSON 中,这样我们就不会破坏内容类型。但我不确定您的第 3 方服务是否具备解密整个块的能力,或者它是否在 JSON 中查找特定的键值对并对其进行解密。这是重要的区别。您几乎可以加密任何东西并通过网络传输它,但如果侦听器不具备以该格式解密您的数据的条件,您就不得不遵守它们的格式。
推荐阅读
- html - 如何在flex中为每个div均匀分配空间
- python - Python:删除第一个花括号之外的所有字符
- c# - 如何在 Visual Studio 中不打开浏览器运行 URL?
- shiny - Rstudio 服务器在部署 APP 时遇到问题
- android - 如果用户有双 sim 卡,则获取或设置选定的默认 sim 卡
- javascript - mouseup/down 整个 SPA 角度
- apache-kafka - Kafka 消费组清理
- kettle - 如何从 Pentaho 中的多个不同表创建 Fact 表
- keras - 如何在 Keras 中使用 h5 类型的预训练图像分类模型?
- c++ - Makefile 中的 $(objs): %.o : %.cpp 和 $(objs): $(objs:.o=.cpp) 有什么区别