保护 Azure 存储帐户中托管的静态网站的路由

Posted

技术标签:

【中文标题】保护 Azure 存储帐户中托管的静态网站的路由【英文标题】:Protect routes for static website hosted in Azure Storage Account 【发布时间】:2022-01-02 15:37:11 【问题描述】:

我目前正在使用 Azure 静态 Web 应用来托管我的静态网站和 API。但是该服务有一些限制,所以我决定从静态 Web 应用迁移出去。

在 SWA 的静态网站托管中,您可以像这样在 staticwebapp.config.json 中定义 protected routes:


    "routes": [
        
            "route": "/admin/*",
            "allowedRoles": ["administrator"]
        
    ]

如果用户未登录,它将返回401 Unauthorized 如果用户已登录但不属于administrator 角色,它将返回403 Forbidden

我喜欢这个功能,但是当我离开 SWA 时,我想知道如果我使用 Azure 存储帐户部署我的网站,如何实现这个功能?

我查看了具有 rules engine 的 Azure CDN,但不确定它是否可配置用于检查身份验证,是否有更好的选择,因为每个附加规则都会产生成本。

附带问题 - 还是我应该只保护客户端的路由?

【问题讨论】:

【参考方案1】:

关于解决方法您可以在 blob 存储中使用 SAS。

Azure 存储帐户上托管的静态网站是完全公开的。目前,我们无法做到更多。

您可以将静态网站作为具有私有访问权限的容器中的 blob 托管,然后使用 SAS 访问它们。 A shared access signature (SAS)

您可以将静态网站中的 blob 保留为私有访问(仅限 blob 所有者可以使用存储帐户密钥访问)

然后您可以使用简单的服务来验证和授权您的 客户端(如果有很多)并为它们生成 SAS 令牌以访问 blob (网页)。该服务还可以为他们更新令牌。

如果人数有限,您可以生成 SAS 并简单地 与客户分享链接。

您可以在 blob(网页)的粒度上执行此操作,以便您可以授权某些人阅读某些页面,而他们不能阅读其他人

您可以尝试通过 SAS 令牌配置 CDN 端点以访问私有 Blob 容器(不要使用静态网站功能,因为该端点是完全公开的)。 Azure CDN 原生支持此方案——在最坏的情况下,您可以编写重写规则以将请求重定向到带有 SAS 令牌的 Blob 终结点。 Using Azure CDN with SAS

有关详细信息,请参阅此文档:

    Azure-storage static website access permissions

    https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website#custom-domain-names

【讨论】:

以上是关于保护 Azure 存储帐户中托管的静态网站的路由的主要内容,如果未能解决你的问题,请参考以下文章

web.config 重写规则在 blob 存储中的 Azure 静态网站中不起作用

Azure静态网站:被访问的账号不支持http

使用自动化帐户中用户分配的托管标识连接到 Azure 存储帐户(使用 Azure RM 模块)

如何将 Azure 托管标识分配给 Azure 存储帐户?

在Azure Storage 托管HTTP静态网站

Azure:在为 azure 创建新的联合国托管磁盘时无法指定存储帐户。