如何在S3中存储数据并允许用户使用rails API / iOS客户端以安全的方式访问?

2024-05-07

我是编写 Rails 和 API 的新手。我需要一些有关 S3 存储解决方案的帮助。这是我的问题。

我正在为 iOS 应用程序编写一个 API,用户在 iOS 上使用 Facebook API 登录。服务器根据 Facebook 向 iOS 用户颁发的令牌验证用户,并颁发临时会话令牌。从此时起,用户需要下载存储在 S3 中的内容。该内容仅属于该用户及其一部分朋友。该用户可以向 S3 添加更多内容,可供同一群人访问。我想这类似于将文件附加到 Facebook 群组......

用户可以通过两种方式与 S3 交互...将其留给服务器或让服务器颁发临时 S3 令牌(不确定此处的可能性),并且用户可以直接访问 S3 的内容 URL。我发现这个问题谈论的是方法,但是,它确实已经过时了(两年前):关于从 iPhone 应用程序和 S3 上传照片的架构和设计问题 https://stackoverflow.com/questions/4481311/architectural-and-design-question-about-uploading-photos-from-iphone-app-and-s3

所以问题是:

  • 颁发临时令牌时,是否有办法限制用户只能访问 S3 上的某些内容?我怎样才能做到这一点?假设有...比如说 100,000 或更多用户。
  • 让iOS设备直接拉出这些内容是不是一个好主意?
  • 或者应该让服务器控制所有内容传递(这当然解决了安全性)?这是否意味着我必须先将所有内容下载到服务器,然后再将其传递给连接的用户?
  • 如果您了解 Rails...我可以使用回形针和 aws-sdk gems 来实现这种设置吗?

对多个问题表示歉意,并且感谢您对这个问题的深入了解。谢谢 :)


使用AWS-SDK 宝石 https://github.com/aws/aws-sdk-ruby,您可以通过调用获取任何 S3 对象的临时签名 urlurl_for https://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/S3Object.html#url_for-instance_method:

s3 = AWS::S3.new(
  :access_key_id => 1234,
  :secret_access_key => abcd
)
object = s3.buckets['bucket'].objects['path/to/object']
object.url_for(:get, { :expires => 20.minutes.from_now, :secure => true }).to_s

这将为您提供一个签名的临时使用 URL,仅用于 S3 中的该对象。它会在 20 分钟后过期(在本示例中),并且仅适用于该一个对象。

如果客户端需要大量对象,则需要发出大量签名 URL。

或者应该让服务器控制所有内容传递(这当然解决了安全性)?这是否意味着我必须先将所有内容下载到服务器,然后再将其传递给连接的用户?

请注意,这并不意味着服务器需要下载每个对象,它只需要验证并授权特定客户端访问 S3 中的特定对象。

来自亚马逊的 API 文档:https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#RESTAuthenticationQueryStringAuth https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#RESTAuthenticationQueryStringAuth

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在S3中存储数据并允许用户使用rails API / iOS客户端以安全的方式访问? 的相关文章

随机推荐

  • Highcharter 已弃用函数的输出与建议的不同

    我正在用 Josh Kunst 的出色作品制作一个时间序列情节highcharterR 中的库 使用此数据 gt dput t structure c 2 2 267822980 325286564 66697091 239352431 9
  • 如何防止 CouchDB 在更新简单计数器时创建文档修订

    我想将计数器存储在 CouchDB 文档中 并在每个页面视图上递增 CouchDB 将创建本文档的完整修订版 只需 1 次计数器更新 这样会不会占用太多空间 考虑到我一天的点击量为 100 万次 我一天内可能会查看该文档的 100 万次修订
  • 向 ChartJS 数据点添加逗号

    我需要在 ChartJS 图表中的数字中添加逗号 前任 数据点可能是 1032 05 4334 75 8482 46 我需要它显示为 1 032 05 4 334 75 8 482 46 以下是包含当前代码的开发网站的链接 投资计算器 ww
  • 快速分类(分箱)

    我有大量条目 每个条目都是浮点数 这些数据x可以通过迭代器访问 我需要使用像这样的选择对所有条目进行分类10
  • 如何关闭 Grizzly 日志记录?

    如何关闭 Grizzly 的日志记录 我想关闭以下日志记录 Okt 18 2018 8 42 24 AM org glassfish grizzly http server NetworkListener start INFORMATION
  • PCL 点特征直方图 - 分箱

    分箱过程是点特征直方图估计的一部分 结果是b 3bins 如果仅使用三个角度特征 alpha phi theta 其中 b 是 bins 的数量 为什么b 3并不是b 3 假设我们考虑阿尔法 将特征值范围细分为b个区间 您迭代查询点的所有邻
  • 修改 FOR 循环内的索引变量是否是一种好的做法? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 给定代码 for int i 1 i lt 5 i Do work 改变其值是可以接受的i从循环内 例如 for int i 1 i lt 5
  • TransactionScope 超时过早发生?

    我在用着TransactionScope进行一些批量插入和更新 问题是 即使我设置了超时 我也会在 30 分钟长的操作中遇到超时异常TransactionScope到一小时 此外 在异常之后 它会插入看似随机数量的批次记录 例如 最后一个操
  • 有什么方法可以有效地应用大型 git 补丁吗?

    我们收到了一个大补丁 修改了大约 17000 个文件 其大小为5 2G 应用补丁时git apply 3 12个小时后还没有完成 我们将每个文件的补丁分成更小的补丁 然后一一应用它们 这样至少我们可以看到进度 再次卡在一个文件补丁上 仍然有
  • .bind("move_node.jstree",.. -> data.rslt.obj undefined。如何获取节点数据?

    我有一个 check move 的自定义功能 crrm move check move function m var p this get parent m o if p return false if m cr 1 return fals
  • NPM 无法安装依赖项 - 尝试解锁尚未锁定的内容

    我一直在尝试在我的 package json 文件上运行 npm install 但遇到了很多麻烦 我的所有依赖项上一直显示 错误 尝试解锁尚未锁定的 XXX 这是其中之一 Error Attempt to unlock tbd 0 6 4
  • 为 Docker 容器分配静态 IP

    我现在尝试在启动 Docker 容器时分配静态 IP 172 17 0 1 我使用端口 2122 作为该容器的 ssh 端口 以便让该容器监听端口 2122 sudo docker run i t p 2122 2122 ubuntu 此命
  • Laravel 社交名流 $user->getId()?

    我不确定这是否是真正导致我的问题的原因 但也许有人会知道 当我使用 Laravel Socialite 并执行以下操作时 social user Socialite driver provider gt user 然后我的代码中的其他地方执
  • 将问号 (?) 替换为 (\\?)

    我正在尝试定义一个模式来匹配文本中带有问号 的文本 在正则表达式中 问号被认为是 一次或根本不 那么我可以用 替换文本中的 符号来解决模式问题吗 String text aaa aspx pubid 222 zzz Pattern p Pa
  • 将Excel数据转换为特定的JSON格式

    我收到一个 Excel 文件 xlsx 如下所示 行和列的数量可以变化 例如 它也可以如下所示 对于第一张图片中的 Excel 工作表 JSON 应如下所示 value Prename Nik Age 17 Country Switzerl
  • 防止被 0 除的 Typescript 类型

    我正在使用打字稿创建一个用于培训目的的计算系统 但在除法过程中出现打字错误 您知道如何解决吗 type Variable value number resolve gt number type NoZeroVariable value Om
  • 从其他模块调用的数组扩展

    其他模块 例如 XCTest 项目 无法使用数组扩展方法 为了简单起见 下面的代码什么也不做 但可以用来重现错误 import Foundation extension Array mutating func myMethod toInde
  • 将选择标准添加到 read.table

    让我们采用以下我导入的数据集的简化版本read table a lt as data frame c M M F F F b lt as data frame c 25 22 33 17 18 df lt cbind a b colname
  • 在Python中获取目录基名的优雅方法?

    我有几个脚本将目录名称作为输入 并且我的程序在这些目录中创建文件 有时我想获取给程序的目录的基本名称 并用它在目录中创建各种文件 例如 directory name given by user via command line output
  • 如何在S3中存储数据并允许用户使用rails API / iOS客户端以安全的方式访问?

    我是编写 Rails 和 API 的新手 我需要一些有关 S3 存储解决方案的帮助 这是我的问题 我正在为 iOS 应用程序编写一个 API 用户在 iOS 上使用 Facebook API 登录 服务器根据 Facebook 向 iOS