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

How get Azure KeyVault secret for C# IIS application running on premise

是否有任何方法可以使用 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/console 应用程序,它也不适用于 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;
});

Is there any way to get a key vault secret using the IIS app pool identity to authenticate?

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

使用Visual Studio和Azure CLI都需要登录到azure。并且用户应该添加到 Azure keyvault 的 Access Policy

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

但是,如果您想使用 IIS 应用程序池标识进行身份验证,则无法将 Application Pool Identity 帐户添加到 Azure keyvault。因此,您无法避免使用服务主体的 id 和 secret 进行身份验证。