c# - 在部署时从 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 权限来执行此操作。
解决方案
尝试以下两个步骤:
获取主机主密钥:
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourcegroupName}/providers/Microsoft.Web/sites/{functionApp}/functions/admin/masterkey?api-version=2016-08-01
获取功能键:
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 访问权限。
推荐阅读
- docker - Authentication, O Auth 2, Google Cloud Platform COS Container Optimized
- asp.net-core - 如何在 Blazor 的可重用表组件中显示数据
- javascript - 在 Angular 中使用 *ngFor 和 *ngIf 根据索引值切换 div
- .net - ZipArchiveEntry 创建 xlsx 文件,但发现它会丢失 `CompressionOption` 和 `ContentType` 和 `Uri` 和 `Package` 信息
- mysql - 如何从 mysql 数据库中检索行并通过 Express.js 将它们作为 JSON 发送?
- sql - 访问 VBA - 事件更新所有记录,而不仅仅是当前记录
- java - DynamoDB 增强型客户端(非常)第一个请求的启动很慢,可以“选择 1 个”吗?
- multithreading - SWI-Prolog:使用带有互斥锁的线程
- r - R中的循环相关测试
- reactjs - 如何在 React 中使用 gorilla/csrf