1

我遇到了 Azure 应用程序配置服务,它能够通过使用 Key Vault 参考选项创建新记录来链接来自 Azure KeyVault 的机密。

如Microsoft Doc中所述,我已将 Microsoft 扩展用于应用程序配置

已完成的步骤

  • 通过 CMD 创建服务原则 - ```az ad sp create-for-rbac -n " http://mySP " --sdk-auth
  • 也通过 CMD 授予创建的服务提供商的权限 -az keyvault set-policy -n <your-unique-keyvault-name> --spn <clientId-of-your-service-principal> --secret-permissions delete get list set --key-permissions create decrypt delete encrypt get list unwrapKey wrapKey
  • 在环境变量中设置客户端 ID 和密码

  • 方法实现

        public static IHostBuilder CreateHostBuilder(string[] args) =>
                        Host.CreateDefaultBuilder(args)
                        .ConfigureWebHostDefaults(webBuilder =>
                         webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
                         {
                             var settings = config.Build();
    
                             config.AddAzureAppConfiguration(options =>
                             {
                                 options.Connect(settings["ConnectionStrings:AppConfig"])
                                         .ConfigureKeyVault(kv =>
                                         {
                                             kv.SetCredential(new DefaultAzureCredential());
                                         });
                             });
                         })
                         .UseStartup<Startup>());
            }
    
    

当我尝试从具有至少一个 KV 引用的应用程序配置中获取数据时,问题就开始了。我收到以下错误(仅在这种情况下,一个 KV 参考链接到应用程序配置)

服务请求失败。状态:401(未授权)

内容:

{"error":"invalid_client","error_description":"AADSTS7000215: Invalid client secret is provided.\r\nTrace ID: \r\nCorrelation ID: \r\nTimestamp: 2020-05-27 22:59:52Z","error_codes":[7000215],"timestamp":"2020-05-27 22:59:52Z","trace_id":"","correlation_id":"","error_uri":"https://login.microsoftonline.com/error?code=7000215"}

Headers:
Cache-Control: no-store, no-cache
Pragma: no-cache
Strict-Transport-Security: REDACTED
X-Content-Type-Options: REDACTED
x-ms-request-id: REDACTED
x-ms-ests-server: REDACTED
P3P: REDACTED
Set-Cookie: REDACTED
Date: Wed, 27 May 2020 22:59:51 GMT
Content-Type: application/json; charset=utf-8
Expires: -1
Content-Length: 471

任何帮助将不胜感激:) 谢谢!

4

2 回答 2

4

使用时DefaultAzureCredential,它会首先尝试托管标识(推荐用于 Azure 上的服务),最后是需要为进程设置以下环境变量的服务主体(无论是在您的应用程序服务上,还是用于本地开发 - 可以不同,只要服务主体 ID 具有适当的权限):

  • AZURE_TENANT_ID :租户 ID
  • AZURE_CLIENT_ID :服务主体 ID
  • AZURE_CLIENT_SECRET :仅在创建服务主体后才显示的服务主体机密(密码)

您还可以使用 Azure.Identity 的新预览版,它支持其他更常见且更易于在开发机器上使用的身份验证方案,例如 Azure CLI ( az login)、Visual Studio 和 Visual Studio Code。

于 2020-05-28T08:38:25.213 回答
1

问题是,Visual Studio 由于某种原因无法获取环境变量,因此它不会随请求一起发送,一旦我以管理员身份运行 Visual Studio,它就可以工作

于 2020-06-03T11:01:02.020 回答