C# Microsoft.Azure.KeyVault.Models.KeyVault错误异常:';操作返回了无效的状态代码';不良请求'';

C# Microsoft.Azure.KeyVault.Models.KeyVault错误异常:';操作返回了无效的状态代码';不良请求'';,c#,.net,azure,console-application,azure-keyvault,C#,.net,Azure,Console Application,Azure Keyvault,我试图在.Net 4.5控制台应用程序上从Azure keyVault获取机密,我遵循了这一点,但我收到了标题中提到的错误请求。我必须提到,我的控制台应用程序是新创建的,我正在使用属于另一个.Net核心web api的clientId和ClientSecret,该api能够成功获取机密,但我的控制台应用程序并非如此。请在下面找到我使用的代码,异常是在client.GetSecretAsync(vaultAddress,SecretName)的指令下引发的: static void Main(字符

我试图在.Net 4.5控制台应用程序上从Azure keyVault获取机密,我遵循了这一点,但我收到了标题中提到的错误请求。我必须提到,我的控制台应用程序是新创建的,我正在使用属于另一个.Net核心web api的clientId和ClientSecret,该api能够成功获取机密,但我的控制台应用程序并非如此。请在下面找到我使用的代码,异常是在client.GetSecretAsync(vaultAddress,SecretName)的指令下引发的:

static void Main(字符串[]args)
{
WriteLine($“来自Vault的秘密值为:{GetVaultValue()}”);
//DoVault();
Console.ReadLine();
}
静态字符串GetVaultValue()
{
KeyVaultClient=newkeyvaultclient(newkeyvaultclient.AuthenticationCallback(GetToken));
var vaultAddress=”https://VaultName.vault.azure.net/";
var secretName=“storageName:NameAccount”;
var secret=client.GetSecretAsync(vaultAddress,secretName).GetAwaiter().GetResult();
返回秘密值;
}
静态异步任务GetToken(字符串权限、字符串资源、字符串范围)
{
var clientId=“这是ID”;
var clientSecret=“这是我的秘密”;
ClientCredential=新的ClientCredential(clientId,clientSecret);
var context=newauthenticationcontext(authority,TokenCache.DefaultShared);
var result=await context.AcquireTokenAsync(资源、凭证);
返回result.AccessToken;
}

secretName包含导致此错误的冒号

根据我的测试,我们不允许在密钥库名称中包含冒号:


请检查并更正。

如果您没有正确的密码,则会发生此错误permissions@Sajeetharan谢谢你的评论,我会调查的,请分享你的代码。并指出抛出错误的位置。KeyVault客户端已被弃用,取而代之的是SecretClient,可在我们的新软件包Azure.Security.KeyVault.Secrets中找到。我们还将KeyClient和CertificateClient拆分为单独的包。有关更多信息,请参阅和。与Azure.Identity中的DefaultAzureCredential一起使用,它们更易于使用,并且不需要在开发环境到生产环境中更改代码。如果我的答案对您有帮助,您可以将其作为答案接受(单击答案旁边的复选标记将其从灰显切换为填充)。看见这可能对其他社区成员有益。谢谢。非常感谢你花时间来测试,我真的很感激。
static void Main(string[] args)
    {
        Console.WriteLine($"Secret Value from Vault is: { GetVaultValue()}");
        //DoVault();

        Console.ReadLine();
    }
    static string GetVaultValue()
    {
        KeyVaultClient client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken));
        var vaultAddress = "https://VaultName.vault.azure.net/";
        var secretName = "storageName:NameAccount";
        var secret = client.GetSecretAsync(vaultAddress, secretName).GetAwaiter().GetResult();
        return secret.Value;
    }
    static async Task<string> GetToken(string authority, string resource, string scope)
    {
        var clientId = "This-IS-ID";
        var clientSecret = "THIS-iS-my-Secret";
        ClientCredential credential = new ClientCredential(clientId, clientSecret);
        var context = new AuthenticationContext(authority, TokenCache.DefaultShared);
        var result = await context.AcquireTokenAsync(resource, credential);
        return result.AccessToken;
    }