如何获取在内部运行的C#IIS应用程序的Azure KeyVault机密

时间:2019-09-25 23:46:52

标签: azure-keyvault

是否可以使用IIS应用程序池身份进行身份验证来获取密钥库机密?

从Azure KeyVault读取值的典型解决方案是

AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
result = await keyVaultClient.GetSecretAsync(secretUrl).ConfigureAwait(false);

尽管在Visual Studio中甚至在Windows /控制台应用程序中都可以使用,但是即使在应用程序池中配置了可以正常工作的身份,它也不适用于IIS应用程序。

到目前为止,我发现的所有解决方案都需要一种服务原则,并提供其ID和机密-并且它在本地存储我想避免的机密。

示例:https://blog.bitscry.com/2019/02/13/using-azure-key-vault-in-a-console-application/

var keyClient = new KeyVaultClient(async (authority, resource, scope) => {
    var adCredential = new ClientCredential(clientId, clientSecret);
    var authenticationContext = new AuthenticationContext(authority, null);
    return (await authenticationContext.AcquireTokenAsync(resource, adCredential)).AccessToken;
});

1 个答案:

答案 0 :(得分:0)

  

是否可以使用IIS应用程序池身份进行身份验证来获取密钥库机密?

对于local development authenticationAzureServiceTokenProvider使用 Visual Studio Azure命令行界面(CLI) Azure AD获取令牌集成身份验证

使用Visual Studio和Azure CLI都需要登录才能使用Azure。并且应该将用户添加到Azure密钥仓库的Access Policy

使用Azure广告集成身份验证,还需要将service principal添加到Access Policy中。

但是,如果要使用IIS应用程序池身份进行身份验证,则无法将Application Pool Identity帐户添加到Azure密钥库中。因此,您无法避免使用服务主体的ID和密码进行身份验证。