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

时间:2017-01-13 00:31:23

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

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

我对最安全/最好的处理方式感到迷茫。我已经读过在app.config中设置它也是一个坏主意。我找到了一些Web应用程序的参考资料,建议使用azure门户网站中提供的连接字符串,但由于这不是一个Web应用程序,我不确定我是如何在我的代码中实际检索这些值的(或者如果那是可能的话。)

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

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

我刚刚在我的功能中启用了身份验证。

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:6)

API Key(代码)确实不适合您在外部分发的客户使用,因此您的移动应用不应使用它。

此处最直接的选择是在Azure功能中使用内置的App Service Authentication功能,并在您的应用中实施身份验证流程,这样您就可以安全地验证用户

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