静态 Angular 应用调用 Azure Functions。这是一个安全问题吗?

Static Angular App calling Azure Functions. Is it a security issue?

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

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

问题:

谢谢

Are there any flaws in above architecture

当然有

If so, what's the best approach

有很多

If not, is my fear valid?

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

Is it a good idea to expose Azure functions directly to public (even though it accepts only authorized requests).

当然是。在执行任何业务逻辑之前只需进行身份验证。您已完成身份验证(希望是正确的),您很可能在 HTTPS 请求的 header 中传递了令牌(我假设 header 中的 Bearer JWT 令牌),所以它是与有效载荷一起加密(这只会使嗅探变得非常困难)。我还假设您将它保存在安全 cookie 等访问受限的地方。

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

作为旁注

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

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