[英]UWP/WinUI desktop app access to Azure Key Vault secrets
Microsoft 提供了多種方法來安全訪問 Azure Key Vault 機密,特別是使用托管身份或服務主體作為身份提供者。 但是,這些方法明確設計用於基於 Azure 的資源,例如 web 應用程序和微服務。 它們不適用於 UWP/WinUI 桌面應用程序。
到目前為止,我發現允許 UWP/WinUI 桌面應用程序訪問 Key Vault 的唯一方法是將應用程序的 Azure 注冊信息(TenentId、ClientId 和 ClientSecret -- 秘密,它們自己)加載到環境變量中,這些信息由創建新的 SecretClient object (Azure.Security.KeyVault.Secrets) 時的 DefaultAzureCredential() 方法。
但這意味着我需要將這些秘密存儲在代碼或配置文件中,以便在運行時讀取。 絕對不是最佳實踐。 我肯定錯過了什么。
在 2020 年,UWP/WinUI 桌面應用程序安全訪問 Key Vault 機密的最佳做法是什么——而不會在此過程中暴露其他機密?
歸根結底,您的應用程序必須存儲某種秘密——因為它需要將該秘密提供給您的 Key Vault 實例,以證明該應用程序確實可以訪問存儲在該保管庫中的秘密。 它類似於從數據庫中檢索值 - 您必須先存儲並提供連接字符串,然后才能獲取值。
如果不知道您打算如何部署應用程序的特定用例,就不可能建議您應該做什么或不應該做什么。 在我們的例子中,我們有一個 WinForms 應用程序,它由我們的支持團隊明確安裝到我們客戶的機器上,這意味着我們一直在使用客戶證書的舊黃金標准 - 顯然有一個自定義驗證步驟.
值得慶幸的是, Key Vault 明確支持客戶端證書(以下步驟從鏈接的 MSDN 復制):
我們目前正在用 Key Vault 替換我們的自定義客戶端證書驗證器,因為它只會讓一切變得更容易 - 從 Azure 門戶而不是我們的自定義管理應用程序管理證書和吊銷。
我需要將這些秘密存儲在代碼或配置文件中,以便在運行時讀取
您可以將 Azure 注冊信息(TenentId、ClientId 和 ClientSecret)設置到 Secret manager 中並讀取值而不是暴露秘密。
請參考以下步驟:
1.啟用安全管理器。 您需要通過在項目目錄上運行來使用 init 關鍵字。
dotnet user-secrets init
這將在項目.csproj
文件中為UserSecretId
創建 Guid。
2.設置秘密。 您可以使用 set 關鍵字設置秘密
dotnet user-secrets set tenantId "xxxxxxxxxxxx"
3.在代碼中讀取secret manager。
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;
工作 output 如下:
有關 Secret Manager 的更多詳細信息,您可以參考這篇文章。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.