我遇到了Azure App Configuration服务,该服务可以通过创建带有Key Vault引用选项的新记录来链接Azure KeyVault的秘密。
我已按照Microsoft Doc
中所述使用Microsoft扩展程序进行应用程序配置已完成的步骤
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参考的App Configuration中获取数据时,问题开始了。 我收到以下错误消息(仅在这种情况下,一个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
任何帮助将不胜感激:) 谢谢!
答案 0 :(得分:3)
使用DefaultAzureCredential
时,它将首先尝试使用托管身份(建议用于Azure上的服务),最后尝试一种服务主体,该主体要求为该过程设置以下环境变量(在您的应用程序服务上,以及用于本地开发-可以不同,只要服务主体ID具有适当的权限即可)
您还可以使用Azure.Identity的新预览版,它支持在开发计算机上更常见且更易于使用的其他身份验证方案,例如Azure CLI(az login
),Visual Studio和Visual Studio Code。
答案 1 :(得分:1)
问题是,Visual Studio由于某种原因无法获取环境变量,因此它不随请求一起发送,一旦我以Admin身份运行Visual Studio即可正常工作