【问题标题】:How to safely call Azure Function with function level authorization in Xamarin mobile app?如何在 Xamarin 移动应用程序中使用功能级别授权安全地调用 Azure Function?
【发布时间】:2017-01-13 09:36:25
【问题描述】:

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

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

那么您建议我如何处理设置“代码”的值,以便我可以调用我的函数并避免安全问题?

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

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

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

【问题讨论】:

    标签: azure azure-mobile-services azure-functions


    【解决方案1】:

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

    从移动设备向后端服务(例如 Azure Functions)进行身份验证的推荐方法是使用交互式身份验证 - 即某种 OAuth 流。您可以自己构建它,也可以使用 Azure Functions 和 Azure App Service 的内置功能来帮助您(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

    【讨论】:

    • 您的回答将我推向了正确的方向。为清楚起见,我将总结我所缺少的内容。我需要为我的函数应用启用身份验证,但至关重要的是,我还需要将授权级别更改为“匿名”。在不改变这一点的情况下,我不断收到未经授权的消息。然后我需要创建一个 HttpRequestMessage 并将令牌作为“Bearer”值包含到请求的 Headers.Authorization 成员中。
    【解决方案2】:

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

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

    分享有关您的方案的更多信息可能有助于确定替代方案。

    【讨论】:

    • 我刚刚更新了我的问题以包含更多细节。如果您还需要更多,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    相关资源
    最近更新 更多