UWP/WinUI 桌面应用程序访问 Azure Key Vault 机密

Fac*_*izr 5 desktop uwp azure-keyvault winui

Microsoft 提供了多种方法来安全访问 Azure Key Vault 机密,特别是使用托管身份或服务主体作为身份提供者。但是,这些方法明确设计用于使用基于 Azure 的资源,例如 Web 应用程序和微服务。它们不适用于 UWP/WinUI 桌面应用程序。

到目前为止,我发现的允许 UWP/WinUI 桌面应用程序访问 Key Vault 的唯一方法是将应用程序的 Azure 注册信息(TenentId、ClientId 和 ClientSecret - 秘密,它们本身!)加载到由创建新的 SecretClient 对象 (Azure.Security.KeyVault.Secrets) 时的 DefaultAzureCredential() 方法。

但这意味着我需要将这些秘密存储在代码或配置文件中以便在运行时读取。绝对不是最佳实践!我肯定错过了什么。

2020 年,UWP/WinUI 桌面应用程序安全访问 Key Vault 机密(且在此过程中不会暴露其他机密)的最佳实践是什么?

Joe*_*Cai -1

我需要将这些秘密存储在代码或配置文件中以便在运行时读取

您可以将 Azure 注册信息(TenentId、ClientId 和 ClientSecret)设置到 Secret 管理器中并读取该值,而不是暴露 Secret。

请参考以下步骤:

1.启用安全管理器。您需要通过在项目目录上运行来使用 init 关键字。

dotnet user-secrets init
Run Code Online (Sandbox Code Playgroud)

UserSecretId这将在项目文件中创建 Guid .csproj

在此输入图像描述

2.设定秘密。您可以使用设置关键字来设置秘密

dotnet user-secrets set tenantId "xxxxxxxxxxxx"
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

3.从秘密管理器中读取代码。

private readonly IConfiguration _configuration;

public WeatherForecastController( IConfiguration configuration)
{
    _configuration = configuration;
}
string keyVaultUrl = "https://xxxx.vault.azure.net";
TokenCredential credential = new DefaultAzureCredential();
credential = new ClientSecretCredential(_configuration["tenantId"], _configuration["clientId"], _configuration["clientSecret"]);

var secretClient = new SecretClient(new Uri(keyVaultUrl), credential);
KeyVaultSecret secret = secretClient.GetSecret("xxxx");
var secretvalue = secret.Value;
Run Code Online (Sandbox Code Playgroud)

工作输出如下:

在此输入图像描述

有关秘密管理器的更多详细信息,您可以参考这篇文章