我有一个托管在 Azure 上的 Web 应用程序 (MVC/C#/.Net Core 3.1)。
两个由 HTTP 触发并受 APIM 保护的新 Azure 函数将添加到同一父资源组中,以便 Web 应用程序从中获取数据。
如何才能使 Azure 函数仅响应应用程序发出的 GET 请求?有没有一种方法可以实现“如果原始服务器既不是 Azure 盒子 123-South 也不是 123-West,则返回 HTTP 403”,或者如果添加更多功能,可以更好地扩展?
或者,是否有一种方法可以使用代码检查 Azure 函数中的 HTTP header ?
我们之前的 Web API(该函数的前身)是“本地”托管的。它检查 HTTP 请求的 header ,查找特定的 base-64 编码 header 。如果找到,则对 header 的值进行解码并检查其正确性。对于 Azure 来说,这仍然是一种有效的方法吗?
注意:我们的网络应用不要求用户通过 Microsoft 或任何其他身份提供商登录。我们的用户是公众,而不是我们域的一部分。
最佳答案
我假设您的 Azure Functions 已通过使用 IP Restrictions 防止直接调用(APIM 除外)。或其他方式,但只是想将其发布给遇到此问题的其他人。
您可以根据自己的情况考虑一些选项
<强>1。使用Client Certificate Authentication
这将要求您的 Web 应用程序在其对 APIM 的请求中设置客户端证书。
<强>2。使用Azure AD Auth
由于您的客户没有要传递的 token ,因此这在您的情况下是可以接受的。在这里,您的 Web 应用程序将使用 Managed Identity 获得一个 token 。或客户端凭据,并将其在请求中传递给 APIM。
<强>3。设置自定义 header
这可能是最不安全但最容易实现的。您只需在 Web 应用程序的请求中添加 header ,APIM 将使用 policies 验证该值。 .
请注意,如果这是一个静态值,并且您的客户以某种方式获得了它,则他们可以直接调用 APIM。使其动态化会增加此选项的复杂性,此时最好选择#1 或#2。
关于azure - 如何保护受 APIM 保护的 Azure Functions,以便它们仅响应来自同一资源组中的 Azure Web 应用程序的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75653606/