有没有办法请求特定于存储桶的读取范围?

Posted

技术标签:

【中文标题】有没有办法请求特定于存储桶的读取范围?【英文标题】:Is there a way to request bucket specific read scope? 【发布时间】:2019-12-14 20:00:32 【问题描述】:

我正在尝试找到一种方法来限制对我的应用程序中每个存储桶的访问。目标是防止用户从“分配”给他们的存储桶以外的其他存储桶访问对象。

简而言之,该应用为每个用户分配一个存储桶来存储对象,我想防止用户访问他们不打算访问的存储桶。

我猜一个请求可能是这样的:

curl -v 'https://developer.api.autodesk.com/authentication/v1/authenticate'
  -X 'POST'
  -H 'Content-Type: application/x-www-form-urlencoded'
  -d '
    client_id=obQDn8P0GanGFQha4ngKKVWcxwyvFAGE&
    client_secret=eUruM8HRyc7BAQ1e&
    grant_type=client_credentials&
    scope=data:read&
    # I'm thinking for some parameter like this
    bucket=CLIEN_SPECIFIC_BUCKET_ID
  '

【问题讨论】:

【参考方案1】:

您应该实施自己的应用管理层来管理用户对不同存储桶的权限 - 根据最佳实践,用户不应接触应用级访问令牌来访问存储桶本身。

为 Forge 应用而不是最终用户打造云存储桶,因为它是一个开发平台,在开发人员/应用程序级别而不是最终用户级别上运行。

编辑:

对于 Viewer,您可以使用 AOP 方法并在后端设置代理并将身份验证委托给代理 - 您可以重定向 Viewer 以将请求发送到您的端点以检索资源,而您的后端可以依次进行身份验证和检索来自 Forge 服务的资源,这样您就不必向用户公开访问令牌。试试:

Autodesk.Viewing.endpoint.setEndpointAndApi('https://yourhostname/your/proxy/service/path')

您可以将自定义标头添加到查看器的请求中,以针对您自己的应用进行身份验证:

Autodesk.Viewing.endpoint.HTTP_REQUEST_HEADERS = 

或者,您可以将衍生产品下载到您自己的存储中并从那里加载它们 - 有关详细信息,请参阅 here。

【讨论】:

Forge 的查看器使用存储的对象。 Web 应用程序(加载查看器的位置)使用的令牌带有“viewables:read”,因此它无法访问任何存储桶信息。问题在于,使用该令牌理论上您可以查看文件/对象,这不是所谓的“您的存储桶”的一部分。我在后端确实有一个管理层,它隐藏了那些你不应该看到的文件(不提供他们的 URI),但是知道文件的 urn 足以让恶意行为者查看这个文件(因为令牌是对此 client_id 的每个存储桶都有效)。 第二个选项看起来不错,我会尝试采用它。我还找到了用于在 C# .NET 中提取的资源。可能对其他人有用forge.autodesk.com/blog/forge-svf-extractor-c-net我稍后会发布更新。 我宁愿建议为每个用户创建一个应用程序。因此,每个用户都将使用分配给他们的秘密访问存储桶。

以上是关于有没有办法请求特定于存储桶的读取范围?的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 从 S3 存储桶的子目录中读取所有 JSON 文件

针对单个存储桶的读取和写入权限的 AWS S3 IAM 策略

消息如何从 ActiveMQ 读取并传递到相应的队列?

apache-beam 从 GCS 存储桶的多个文件夹中读取多个文件并加载它 bigquery python

对于 CCV2 门户,有没有办法为 Spartacus / JS Storefront 指定特定于环境的属性?

是否可以在不停止被跟踪者的情况下读取线程的指令指针?