如何从本地 asp.net 应用程序在 Azure Key Vault 中设置机密

use*_*160 5 azure azure-keyvault azure-web-app-service

我有一个本地 ASP.NET Core 3.1 应用程序,我想在 Azure Key Vault 中设置一个机密。以下是我从微软使用的代码:

string secretName = "xxSecret";

string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = "https://" + keyVaultName + ".vault.azure.net";
var secretClient = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());

string secretValue = "test";
secretClient.SetSecret(secretName, secretValue);
KeyVaultSecret secret = secretClient.GetSecret(secretName);
Run Code Online (Sandbox Code Playgroud)

当我尝试设置秘密时,在 Postman 中出现以下错误:

Azure.Identity.AuthenticationFailedException: DefaultAzureCredential authentication failed.
 ---> Azure.Identity.AuthenticationFailedException: SharedTokenCacheCredential authentication failed.
 ---> Microsoft.Identity.Client.MsalServiceException: AADSTS70002: The client does not exist or is not 
enabled for consumers. If you are the application developer, configure a new application through the 
App Registrations in the Azure Portal
Run Code Online (Sandbox Code Playgroud)

我不想注册这个应用程序,因为我想在本地调试它。我猜问题是我没有设置正确的访问策略。如何授予我的本地应用程序访问权限?

(在本地运行应用程序之前,我使用 Azure PowerShell 对我的 Azure 目录进行身份验证。)

Joe*_*Cai 5

如何授予我的本地应用程序访问权限?

对于本地开发,AzureServiceTokenProvider使用 Visual Studio、Azure CLI 或 Azure AD 集成身份验证获取令牌。每个选项都按顺序尝试,库使用第一个成功的选项。

要使用 Visual Studio 进行身份验证:

登录到 Visual Studio 并使用Tools> 选项打开Options.

选择Azure Service Authentication,选择本地开发账号,选择OK

在 azure 上,您需要转到 Azure 密钥保管库。单击Access Policies并添加您的帐户,该帐户与之前登录的帐户相比,具有获取和设置机密权限。然后你可以使用你的代码来获取秘密值。

您也可以AzureServiceTokenProvider在不初始化秘密值的情况下使用获取秘密。

var KeyVaultUrl = "https://xxx.vault.azure.net/secrets/xxx/xxxxxxxxxxxxxx";
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
KeyVaultClient keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = keyVaultClient.GetSecretAsync(KeyVaultUrl).Result.Value;
Run Code Online (Sandbox Code Playgroud)

  • 注意 不再建议将 Microsoft.Azure.Services.AppAuthentication 与新的 Key Vault SDK 一起使用。它被新的 Azure Identity 库 DefaultAzureCredentials 取代,可用于 .NET、Java、TypeScript 和 Python,并且应该用于所有新开发。更多信息可在此处找到:[身份验证和 Azure SDK](https://devblogs.microsoft.com/azure-sdk/authentication-and-the-azure-sdk/)。 (2认同)