调用 Azure Functions 的静态 Angular 应用程序。是安全问题吗?

Posted

技术标签:

【中文标题】调用 Azure Functions 的静态 Angular 应用程序。是安全问题吗?【英文标题】:Static Angular App calling Azure Functions. Is it a security issue? 【发布时间】:2021-12-03 01:30:11 【问题描述】:

我有一个进行身份验证/授权的node.js 应用程序。我有一个 Azure 函数,它接受身份验证令牌(验证并)执行背后的业务逻辑(通过 CORS 公开)。我有一个带有 Angular 应用程序的静态网站,它重定向到 node.js 进行身份验证,获取令牌并使用相同的方法(直接)调用 Azure 函数。对于来自 Angular 的所有后续请求,我们使用相同的令牌。

我的担心:如果任何网络嗅探工具获取令牌,我们的业务可能会受到攻击,因为相应的工具将拥有代表用户执行 Azure 功能的一切。我使用 cURL 进行了测试,并且能够直接执行 Azure 功能(使用从开发工具中捕获的令牌)。

问题:

上述架构是否存在缺陷 如果是这样,最好的方法是什么 如果不是,我的恐惧是否有效? 将 Azure 函数直接公开是否是个好主意(即使它只接受授权请求)。

谢谢

【问题讨论】:

如果您的所有流量都是 https - 嗅探流量并不是一件简单的事。如果是这样,每个有用户名/密码的网站都会很危险.. Azure 以及任何其他云提供商都可以配置为接受来自某些 ips 的请求。此外,向 azure 请求内容的正确方法是在 yow 服务器中,客户端应该只显示您的节点应该为数据提供服务的数据。在您的节点中,在您请求天蓝色的东西之前,您需要检查当前 IP 是否与用于创建令牌的 IP 相同 【参考方案1】:

对于 Azure 函数,使用基于 JWT 令牌的授权很容易实现。以下讨论很好地解释了这一点。 Using JSON Web Tokens (JWT) with Azure Functions (WITHOUT using Active Directory) 我们有类似的实现,但有一些变化。

【讨论】:

【参考方案2】:

以上架构是否存在缺陷

当然有

如果是这样,最好的方法是什么

有很多

如果不是,我的恐惧是否有效?

有点,但如果你没有搞砸身份验证部分,你应该没问题;)

将 Azure 函数直接公开是否是个好主意(即使它只接受授权请求)。

确实如此。只需在执行任何业务逻辑之前进行身份验证。您已完成身份验证(希望是正确的),您很可能在 HTTPS 请求的标头中传递了令牌(我假设标头中的 Bearer JWT 令牌之类的东西),因此它与有效负载一起被加密(这仅使很难闻出来)。我还假设您将它保存在某些访问受限的地方,例如安全 cookie 等。

您没有提到的要考虑的一件事是令牌失效(例如当用户注销时)和合理的到期时间(这些取决于您的用例)。也许添加 drop-all-sessions 按钮。有很多策略可以强化您的 api,但从未真正让您达到目标。

附注

根据经验,如果 AAD B2C 是一个选项,我会选择它来管理最终用户。与 Azure Functions 很好地集成,为您提供 oauth 流可以与 3rd 方集成 + 相当多的库以将其与您的堆栈集成(历史上各种质量),您可以强制 MFA,它为您提供 MS 质量的土豆邮票。 IIRC 的主要缺点是 EasyAuth 在您的本地开发环境中不起作用,因此您必须以某种方式对其进行模拟。

【讨论】:

以上是关于调用 Azure Functions 的静态 Angular 应用程序。是安全问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

Azure Functions 应用程序 + Auth0 提供程序,使用身份验证令牌调用 API 时出现 401

有没有办法在Azure Functions中轻松跟踪CosmosDB RU?

Azure Functions 突然找不到入口点错误

使用 Azure Functions Core Tools 在本地运行 Azure 函数时出现问题

Newtonsoft.Json 参考抱怨 Azure Functions

Azure Functions - 限制并行执行