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
以避免中间人攻击。
我正在使用 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
以避免中间人攻击。