Azure Table 通过 javascript 调用 Storage Rest

Azure Table Storage Rest call through javascript

我正在使用 Django 构建应用程序。该应用程序使用 Azure Table 存储来存储原始数据。我希望用户能够访问该数据。实际上,用户端会不断地从 table 请求数据,所以我不能让服务器进行所有这些调用,然后将数据发送给用户。相反,我想让用户直接从 Azure 请求数据。

是否可以通过 javascript 做到这一点?你认为这样的事情是可行的解决方案吗?另外,您能否描述一下此过程中涉及的安全隐患?

更新

found 这个答案是 2 年前提出的,它声明你不能从 javascript 拨打电话。这仍然相关吗?

Is it possible to do that through javascript?

绝对是的。事实上,这是我构建的产品的基础。虽然有些事情你需要先做。

启用 CORS

由于从您的域提供的 JavaScript 将访问您的存储帐户中的资源,默认情况下这将被浏览器禁用,因为它是一个跨域请求。您需要做的是在存储帐户的 Table 服务上启用 CORS 以允许跨域请求。请注意,这是一次性操作,您需要对每个 domain/storage 个帐户组合执行此操作。要了解有关 Azure 存储和 CORS 的更多信息,请参阅此 link:https://msdn.microsoft.com/en-us/library/azure/dn535601.aspx

使用共享访问签名

启用 CORS 后,您需要在应用程序中做的下一件事是使用 共享访问签名 (SAS)。 SAS 将确保您不会在 JavaScript 中共享您的存储帐户密钥(对所有用户可见)+ 它将向使用您的用户提供有时限的权限(read/write/delete 根据您的要求)应用。要了解有关 SAS 的更多信息,请参阅这些 link:https://azure.microsoft.com/en-in/documentation/articles/storage-dotnet-shared-access-signature-part-1/ & http://blogs.msdn.com/b/windowsazurestorage/archive/2012/06/12/introducing-table-sas-shared-access-signature-queue-sas-and-update-to-blob-sas.aspx

使用 Table 服务 REST API

完成这些事情后,您要做的就是使用 Table Service REST API。为此,您可以使用 AJAX。对于 Table 服务 REST API 操作,请参阅此 link:https://msdn.microsoft.com/en-us/library/azure/dd179423.aspx

Also, can you describe the security implications involved in this procedure?

就安全隐患而言,请确保:

  • SAS有效的时间段刚刚好。您不想创建活动时间超过用户执行操作所需时间的 SAS。
  • 您没有在 SAS 中授予不需要的权限。例如,如果您希望用户做的只是从 table 中读取实体,则只授予读取权限。不要授予 write/delete 权限。
  • 如果可能,请将 IP ACL 应用于您的 SAS,以便仅从 SAS 中定义的 IP 地址使用 SAS。这将阻止用户共享 SAS。
  • 强制执行 HTTPS 以避免中间人攻击。