如何在 Xamarin 移动应用程序中使用功能级别授权安全地调用 Azure 功能?

How to safely call Azure Function with function level authorization in Xamarin mobile app?

我正在使用 Xamarin(不是 Xamarin.Forms,只是普通的 Xamarin)制作一个 iOS/Android 应用程序。我正在使用共享库设置而不是 PCL。我希望我的应用调用 Azure 函数,但我不确定 safest/best 的处理方式。我将 "Authorization level" 设置为 "Function"。测试 URL 中包含“?code=...”部分。我的印象是,如果我将它放在我的 C# 代码中并暴露 "code" 值,从安全角度来看,这被认为是一个坏主意。

我不知道 safest/best 处理这个问题的方法。我读过将它设置为 app.config 也是一个坏主意。我找到了一些 Web 应用程序的参考,建议使用 Azure 门户中可用的连接字符串,但由于这不是 Web 应用程序,我不确定我如何在我的代码中实际检索这些值(或如果可能的话)。

那么您建议我如何设置 "code" 的值,以便我可以调用我的函数并避免安全问题?

更新:根据要求提供更多信息: 我正在使用 MSAL 通过 B2C 活动目录对我的用户进行身份验证。我已经让那部分工作了,并且收到了对用户进行身份验证的令牌。

我刚刚也在我的函数中启用了身份验证。

我的印象是,要从我的移动客户端调用我的函数,我必须制作一个新的 HttpRequestMessage。我不确定我会在其中放置什么来传递我的令牌。

API 密钥(代码)确实不打算供您在外部分发的客户端使用,因此您的移动应用程序不应使用它。

此处最直接的选择是将内置的 App Service Authentication 功能与 Azure Functions 结合使用,并在您的应用程序中实施身份验证流程,这将允许您安全地对 用户进行身份验证.

分享更多关于您的场景的信息可能有助于确定备选方案。

为了确保我理解,您担心的是在您的 iOS/Android 应用程序中嵌入秘密(?code=XXX 值),对吗?如果是这样,是的,这通常被认为是不良的安全做法。最好假设任何可以下载您的应用程序的人都能够发现这些秘密并以他们想要的任何方式使用它们。

从移动设备使用后端服务(例如 Azure Functions)进行身份验证的推荐方法是使用交互式身份验证 - 即某种 OAuth 流程。您可以自己构建它,也可以使用 Azure Functions 和 Azure App Service 的 built-in 功能来帮助您(Azure Functions 构建在 App Service 之上)。这是一个可能有用的资源:

https://docs.microsoft.com/en-us/azure/app-service/app-service-authentication-overview

https://contos.io/working-with-identity-in-an-azure-function-1a981e10b900#.vcjit3ntw