【问题标题】:Manage authorization with Azure API Management and Function App as back-end使用 Azure API 管理和 Function App 作为后端来管理授权
【发布时间】:2019-02-28 02:56:27
【问题描述】:

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

任何想法如何在不硬编码的情况下管理这些代码?

谢谢。

【问题讨论】:

    标签: azure azure-api-management


    【解决方案1】:

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

    此外,您现在可以查看 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. 保存功能键并标记为机密的命名值。

    所有这些都允许您将策略代码归结为调用函数应用程序:

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

    【讨论】:

    • 我理解第一个链接的想法,因此我可以将函数应用身份验证密钥(主密钥或函数密钥)映射到命名值作为机密,然后在 APIM 策略中使用它。但是,问题是我在功能应用程序上使用暂存槽。因此,如果我部署到暂存槽并与生产槽交换,那么生产槽将具有不同的身份验证密钥,因为主密钥和功能密钥会改变。第二个链接,使用 APIM REST Api,我不明白。
    • 第二个链接仅允许您从策略中抽象出更多功能应用程序。您可以改用主机密钥,它们不会随着插槽交换而改变。
    • Vitaliy,这不是真的。交换插槽时主机密钥会发生变化,我会说这是因为每个插槽都在与生产插槽不同的实例上运行。因此,每个实例都有不同的主机密钥。当我将暂存槽与生产槽交换时,产品主机密钥会发生变化,因为暂存实例成为我正在运行的生产实例。
    • 我刚刚对其进行了测试,我确实看到活动插槽主机密钥在交换后仍然存在。从某种意义上说,相同的主机密钥在交换后继续工作以调用从另一个插槽调用的函数。
    • 您好 Vitaliy,我找到了为什么在交换功能插槽和获取(或不获取)密钥交换方面我的行为与您不同的原因。因此,显然这完全取决于您使用的密钥存储机制的类型。根据这个link如果你使用文件系统的机制来存储密钥,那么在交换槽上,主机密钥会改变。如果使用 Blob 机制,则主机密钥不会更改。
    【解决方案2】:

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

    感谢 Vitaliy 的帮助。

    【讨论】:

      猜你喜欢
      • 2020-03-11
      • 2021-10-20
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      相关资源
      最近更新 更多