如何保护从云服务获取的附件 URL

Posted

技术标签:

【中文标题】如何保护从云服务获取的附件 URL【英文标题】:How to secure the attachment URL getting from cloud services 【发布时间】:2021-09-30 11:12:53 【问题描述】:

我有一个用户上传附件的角度形式。

上传时,附件存储在Azure Storage Account。作为回报,我会收到附件的 URL。

生成的 URL 可供公众访问,有什么方法可以添加我的身份验证吗?

预期结果:

    如果用户在浏览器中打开该 URL,则会转到auth page。 将要求用户输入用户名 - 密码的位置

【问题讨论】:

是的,您可以使用共享访问签名令牌授予对特定文件或文件列表的临时访问权限。 docs.microsoft.com/en-us/azure/storage/common/… 有没有办法可以在该 URL 上方使用我自己的身份验证? 是的,你可以。您将文件上传到受保护的存储,因此当直接访问 Azure 时将返回 Forbidden 错误。用户可以通过您的 API 下载文件,您可以在其中检查他们的身份验证状态,并借助 SAS 令牌(例如:1 分钟)生成一个短暂的下载 URL,并将用户重定向到该 URL。 【参考方案1】:

为了创建共享访问签名 (SAS),我使用了 generateSharedAccessSignature 方法。

这样,我使用日期辅助函数轻松创建 1 分钟后过期的 SAS。

注意:将容器的访问策略改为Private(no anonymous access

accountName, accountKey => 从 azure 获取。为了方便和安全,将它们存储在环境文件中

在终端运行以下命令:

npm install azure-storage

NodeJS 代码:

var azure = require('azure-storage');

var blobService = azure.createBlobService(accountName, accountKey);


var startDate = new Date();


var expiryDate = new Date(startDate);
expiryDate.setMinutes(startDate.getMinutes() + 1);

var sharedAccessPolicy = 
    AccessPolicy: 
         Permissions: azure.BlobUtilities.SharedAccessPermissions.READ,
         Start: startDate,
         Expiry: expiryDate
    
;

var token = blobService.generateSharedAccessSignature(containerName, blobName, sharedAccessPolicy);

var sasUrl = blobService.getUrl(containerName, blobName, token);

学习资源:

https://github.com/Azure/azure-storage-node

【讨论】:

【参考方案2】:

不,您不能在 Azure 的 URL 上使用自己的身份验证。 如果用户打开 Azure 的 URL,您也不能重定向到您网站的“身份验证”页面。

【讨论】:

以上是关于如何保护从云服务获取的附件 URL的主要内容,如果未能解决你的问题,请参考以下文章

单从云服务器分析-阿里云和腾讯云那个更有优势?

单从云服务器分析-阿里云和腾讯云那个更有优势?

如何从云函数中的请求中获取参数?火力基地

谁能告诉我一种使用用户提供的服务从云铸造厂连接到 Websphere MQ 的方法

如何保护来自 iphone 的网络服务 URL?

从云计算到函数计算