【问题标题】:Secure Azure Function in Xamarin Forms app.How should it work?在 Xamarin Forms 应用程序中保护 Azure 功能。它应该如何工作?
【发布时间】:2020-04-24 05:35:34
【问题描述】:

在我的 xamarin 表单应用程序中,我需要以安全的方式调用一些 azure 函数。

我做了什么

  1. 我所有的函数都有 AuthorizationLevel=Function
  2. 通过调用存储在服务器上的 webApi 获取功能键
  3. Function Key 在 http 调用的标头中传递(一切正常!!)

我不喜欢上述内容,并且绝对不想将功能键存储在移动应用中作为替代方式

我已阅读有关身份验证/授权的信息,但我无法确定它是否适合我的场景

我的情景

能够以安全的方式调用 azure 函数。用户应该被提示登录。这是一个静默调用。

  1. 是否有某种 accessToken 我可以安全地使用和检索 azure 门户并以某种方式使用它来访问该功能?

  2. 如何在移动应用中安全地访问 Azure 功能?

  3. 有样品吗?我已阅读以下内容并没有帮助

https://docs.microsoft.com/en-us/azure/app-service/overview-authentication-authorization https://docs.microsoft.com/en-us/azure/app-service/configure-authentication-provider-aad

已编辑

在下面尝试,但我在移动应用程序中收到错误(连接字符串错误)。也不确定它在部署时如何工作,因为它使用开发人员的凭据进行调试

var azureServiceTokenProvider = new AzureServiceTokenProvider();
    var keyVaultClient =
        new KeyVaultClient(
            new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
    var secret = await keyVaultClient.GetSecretAsync("mysecretIdentifier").ConfigureAwait(false);
    var key = secret.Value;

【问题讨论】:

  • 该功能是否执行特定于移动用户的任何操作或无关紧要?
  • 没关系,它只是从一个blob中检索一个json。
  • @developer9969 您是否已经在您的移动应用程序中使用 Azure ActiveDirectory 身份验证?
  • @HoussemDbira 我可以使用 AAD 没问题,但必须是静默呼叫,不应提示用户使用这些提供程序登录。从保管库中读取值会很好,但不确定它是如何工作的生产见编辑问题,

标签: xamarin.forms azure-functions


【解决方案1】:

推荐方法

处理 Azure Functions 身份验证的最佳方法是利用 built-in Authentication and Authorization feature。这使用现有的身份验证提供程序来验证您的用户,从而避免创建/存储/维护用户 ID 和密码。

以下是将 Azure AD B2C 身份验证添加到 Azure Functions 的演练:https://github.com/jimbobbennett/MobileAppsOfTomorrow-Lab/blob/master/Workshop/2-SetupAzureFunctions.md#4-setup-function-app-authentication

替代方法

由于听起来您没有使用身份验证,并且您希望拥有一个只有您的应用可以访问的安全 API,我们可以使用 AuthorizationLevel=Function 并在构建时使用我们的持续集成服务器将 API 密钥注入我们的应用 -时间。

我为我的GitTrends 应用程序执行此操作。方法如下:

【讨论】:

  • 非常感谢您抽出宝贵时间,从您那里学到了很多关于异步的知识!。我们针对数据库进行身份验证,并且不能使用任何提供程序。我确实看过你的 gittrends 应用程序,但仍然有人可以反编译 apk 并获取密钥。我想将功能密钥存储在保险库中,然后使用编辑部分中的代码,但我在移动应用程序中收到错误替代方案有一个 .net 核心 api,它从保险库中读取秘密并返回功能密钥,但是然后如何我是否可以保护端点任何 xamarin 使用证书调用 api 的示例?您的建议帮助非常感谢
  • 底线我想从 xamarin 表单应用程序安全调用 azure 函数,而不在应用程序中存储任何密钥。不能相信没有安全的方法来做到这一点
  • 唯一安全的方法是使用 Azure Functions 的身份验证/授权功能。其他所有方式都需要您将 API 密钥硬编码到应用程序中。即使您使用了 Azure Key Vault,您也需要将其连接字符串硬编码到您的应用程序中。
  • 谢谢你,至少我知道我现在的立场。要绝对清楚身份验证/授权始终是“交互式”的,没有静默身份验证吗?我正在寻求某种沉默的身份验证。无论如何,非常感谢
  • 没问题!当您有机会时,不要忘记将此标记为“已回答”,以帮助其他开发人员在未来解决同样的问题。对 - 最终用户必须进行身份验证,这需要用户名/密码或令牌。仅当用户已经在其他地方进行了身份验证并且您能够访问该现有身份验证令牌时,静默身份验证才有效。
猜你喜欢
  • 2011-06-17
  • 2022-11-14
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多