将静态文件作为JSON提供的最简单方法

时间:2016-11-18 14:18:03

标签: json amazon-s3

我想为我的iOS应用提供一个非常简单的文本文件作为JSON,以便在发布时获取数据。

文件结构非常简单,包含一个JSON对象,如下所示:

{
    "id": "957ehco3",
    "name": "Display Name",
    "link": "www.link.com",
    "width": 500,
    "height": 200
}

它会定期更新,但可以手动更新 - 不需要通过JSON请求进行更新。

如果可能,我想从S3提供服务​​,并对源进行某种身份验证。我想避免使用专用服务器/框架来提供这个文件。

最简单的方法是什么?

1 个答案:

答案 0 :(得分:0)

最轻量级的解决方案?

  • 使用名称中没有任何点的存储桶,使用DNS有效名称,该名称以[a-z]开头,并且在其存储桶名称中仅包含[a-z] [0-9] [ - ]
  • 将文件存储在存储桶中,记住在测试时设置适当的Cache-Control标题(max-age=0
  • 让它公开可读
  • 使用 HTTPS 存储桶的REST端点
  • 从应用访问它

使用HTTPS,请求和响应都是加密的,但是主机也经过身份验证,因为Web服务器提供的SSL证书包含它有权代表的主机名,请求将失败。因此,如果我设置我的Web服务器并将其命名为example-bucket.s3.amazonaws.com并设法在某处劫持DNS服务器,说服它返回我的IP地址而不是真正的S3 IP地址,则HTTPS客户端将拒绝与之协商HTTPS我的欺诈性冒名顶替网络服务器,因为我的服务器不具备由客户端(浏览器,应用程序)信任的证书颁发机构签名的SSL证书,授权我的Web服务器将自己表示为example-bucket.s3.amazonaws.com

或者,仍然是相对轻量级但更陡峭的学习曲线......如上所述:添加:取决于对您来说多么重要,即使最坚决的滥用者也难以欺骗数据,请使用有效负载签名公钥/私钥对,在S3元数据中包含签名,在应用程序中嵌入 public 键,并验证收到的数据是否与签名匹配。这可以在创建文件时使用openssl工具完成,并在应用程序内部使用java加密函数。

我在此设想的机制类似于Amazon SNS用于向应用程序证明假定来自SNS的HTTP推送消息是真正的SNS,并且EC2用于证明实例身份文档已发布的机制通过AWS。

告诫lector 当然是因为你不应该接受你在互联网上阅读的安全建议。 :)