我正在尝试使用MSI从控制台应用程序连接到我的azure库
对于这个保险库,我已将我的用户添加为选定原则
我用来连接的代码是
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = await keyVaultClient.GetSecretAsync("https://<vaultname>.vault.azure.net/secrets/<SecretName>").ConfigureAwait(false);
我收到以下异常
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException: 参数:Connectionstring:[未指定连接字符串], 资源:https://vault.azure.net,权限
答案 0 :(得分:5)
class Program
{
// Target C# 7.1+ in your .csproj for async Main
static async Task Main()
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = await keyVaultClient.GetSecretAsync(
"https://VAULT-NAME.vault.azure.net/secrets/SECRET-NAME");
Console.WriteLine(secret.Value);
Console.ReadLine();
}
}
要在本地运行,请创建您自己的Azure AD应用程序注册(Web App / Web API类型以使其成为机密客户端),将其添加到Key Vault并在获取访问令牌时使用其client_id和client_secret -
https://docs.microsoft.com/en-us/azure/key-vault/key-vault-use-from-web-application#gettoken
作为评论中提到的Varun,现在有更好的方式在本地运行时获取访问令牌而不暴露服务主体 -
答案 1 :(得分:0)
在本地运行。
az login
命令(它将提供网址和代码)然后得到像这样的秘密值
var secret = keyVaultClient.GetSecretAsync("https://VAULT-NAME.vault.azure.net/secrets/SECRET-NAME").GetAwaiter().GetResult() ;
secret.Value; //will be your secret.
答案 2 :(得分:0)