使用 Azure API Management 和 Function App 作为后端管理授权

Manage authorization with Azure API Management and Function App as back-end

目前我在一个项目中工作,以实现托管在 Azure 上的几个 APIs,并通过 Azure API 管理服务使它们公开可用。目前APIM服务与Function App(API)进行通信,Function App的授权级别为Function。所以,任何时候有对 APIM 服务的请求,这个请求都会被转发到 Function App,代码被注入到请求中被授权。但是,目前我们正在管理 XML 文件的政策,因此授权码是硬编码在这些文件上的。所以我想知道您是否有关于动态管理这些代码的任何建议,而不是将它们硬编码到这些文件中,因为这些文件保存在 Azure DevOps 存储库中......目前,我们有一个管道设置Azure DevOps 管理策略更改,因此只要有更改,它就会将新策略文件上传到存储帐户,然后我们部署一个 ARM 模板来使用新策略配置所有 APIM 服务。

有没有关于如何在不对它们进行硬编码的情况下管理这些代码的想法?

谢谢。

在此处查看如何在策略中使用命名值:https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-properties。它们是专门为从策略代码中提取一些常用参数 and/or 秘密而创建的。

此外,您现在可以在 APIM 中查看 Function App 导入的工作原理。导入后你有:

  1. 功能应用API
  2. 函数应用程序中选定函数的操作
  3. 后端实体 - https://docs.microsoft.com/en-us/rest/api/apimanagement/apimanagementrest/azure-api-management-rest-api-backend-entity - 指向您的函数应用程序并使用函数键引用命名值
  4. 保存功能键并标记为机密的命名值。

允许您归结策略代码以调用 Function 应用程序的所有内容:

<set-backend-service id="my-function-app" />

在对不同选项进行一些研究和分析后,我最终在 ARM 模板中使用函数资源中的 listSecrets 函数。因此,我将函数调用的结果(函数键)存储在一个变量中,然后我使用该变量组成函数的 URL 并将其关联到 API 管理上的后端服务API 政策。有关此 link.

中 listSecrets 函数的更多信息

感谢 Vitaliy 的帮助。