首页 > 解决方案 > 在部署时从 Azure 函数获取 Azure 函数密钥?

问题描述

我正在使用SendGrid 绑定在 Azure Functions 中发送电子邮件。作为该电子邮件内容的一部分,我想包含指向Azure Functions 实例中的一种HTTP 方法的链接以获取更多信息。我的所有 HTTP 函数都使用AuthorizationLevel.Function.

我已经看到了一种在 PowerShell (和这个中从 ARM 和 Kudu 中抓取密钥的解决方案以及仅使用 ARM 输出密钥的解决方案,但是这些都依赖于我的 Azure Functions 所没有的东西:对 ARM 的权限( Azure 资源管理)API。

我还找到了Azure Functions 主机的密钥管理 API,401 Unauthorized它在本地完全按照我的需要工作,但是一旦部署了 Azure Functions ,我不知道如何通过。我可以使用_master功能键手动通过它,但后来我又回到不知道如何在运行时获取该键。

问题是这样的:是否可以在运行时从 Azure Function Host 获取 Azure Function 的密钥?我非常希望不需要 ARM 权限来执行此操作。

标签: c#azureazure-functions

解决方案


尝试以下两个步骤:

  1. 获取主机主密钥:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourcegroupName}/providers/Microsoft.Web/sites/{functionApp}/functions/admin/masterkey?api-version=2016-08-01
    
  2. 获取功能键:

    GET https://{functionApp}.azurewebsites.net/admin/functions/{functionName}/keys?code={masterKeyFromStep1}
    

步骤 2 的响应:

    {
      "keys": [
        {
          "name": "default",
          "value": "xxxxxxxxxxxxxxxxxxxxxx"
        }
      ],
      "links": [
        {
          "rel": "self",
          "href": "https://myFncApp.azurewebsites.net/admin/functions/myFunction/keys"
        }
      ]
 }

更新:

请注意,步骤 1 需要以下格式的授权标头:

Authorization: Bearer bearerToken

其中可以从 Azure Active Directory (AAD) 获取 bearerToken 字符串,请参见示例的以下代码片段:

    private string AccessToken(string clientID)
    {
        string redirectUri = "https://login.live.com/oauth20_desktop.srf";
        authContext = new AuthenticationContext("https://login.windows.net/common/oauth2/authorize", TokenCache.DefaultShared);
        var ar = authContext.AcquireTokenAsync("https://management.azure.com/", clientID, new Uri(redirectUri), new PlatformParameters(PromptBehavior.SelectAccount)).Result;
        return ar.AccessToken;
    }

请注意,clientID是您在 AAD 中注册的应用程序的 quid,具有Windows Azure 服务管理 API的 API 访问权限。


推荐阅读