如何检查机密是否在 Azure Key Vault 中

dus*_*os3 4 c# azure-keyvault

我团队中的每个开发人员都有自己的个人Azure Key Vault 链接到他们的本地机器。我们有生产站点查看的生产 Azure 密钥保管库。

在代码中,它从保险库中寻找特定的秘密。开发人员不会在他们的个人密钥保管库中拥有秘密,但生产密钥保管库将拥有秘密。

因此,当开发人员进行调试时,它会捕获一个异常,说明该秘密不存在。

有没有办法有条件地检查秘密是否存在,或者我是否只需要让它捕获异常?

fat*_*ine 9

没有方法可以检查密钥保管库中是否存在机密。因此,可以利用一些创造力来做到这一点(为了简洁,跳过了参数检查):

    public bool CheckIfSecretExists(string accessToken, string secretUri)
    {
        var kvClient= new KeyVaultClient(accessToken);
        try
        {
            kvClient.GetSecretAsync(secretUri ).Result.Value;
            return true;
        }
        catch (AggregateException ex)
        {
            if (ex.InnerException is KeyVaultErrorException exception && exception.Body.Error.Code == "SecretNotFound")
                return false;

            throw;
        }
    }
Run Code Online (Sandbox Code Playgroud)

编辑: 找到了一种无需依赖异常即可检查秘密是否存在的方法:

public async Task<bool> DoesSecretExist(string accessToken, string keyVaultBaseUrl, string secretName)
{
    var kvClient = new KeyVaultClient(accessToken);
    try
    {
        IPage<SecretItem> secretVersions = await kvClient.GetSecretVersionsAsync(keyVaultBaseUrl, secretName)
                                             .ConfigureAwait(false);
        if (!secretVersions.Any())
            return false;

        return true;
    }
    catch (Exception )
    {
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)