Azure密钥库Rest API获取密钥401

Azure密钥库Rest API获取密钥401,api,azure,azure-api-management,azure-keyvault,Api,Azure,Azure Api Management,Azure Keyvault,我正在尝试利用Azure Key Vault REST API。我编写了一小段代码来尝试获取密钥: private static async Task<object> GetKey(string uri, string token) { HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);

我正在尝试利用Azure Key Vault REST API。我编写了一小段代码来尝试获取密钥:

private static async Task<object> GetKey(string uri, string token)
{
        HttpClient client = new HttpClient();

        client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
        HttpResponseMessage resp = await client.GetAsync(uri);

        return resp.Content.ReadAsStringAsync().Result;
}
private静态异步任务GetKey(字符串uri、字符串令牌)
{
HttpClient=新的HttpClient();
client.DefaultRequestHeaders.Add(“授权”、“承载人”+令牌);
HttpResponseMessage resp=wait client.GetAsync(uri);
返回resp.Content.ReadAsStringAsync().Result;
}
我是在和你一起打电话

var test = GetKey(
            @"https://<myVault>.vault.azure.net/keys/Test/1?api-version=2016-10-01",
            token
        );
var测试=GetKey(
@"https://.vault.azure.net/keys/Test/1?api-版本=2016-10-01“,
代币
);
其中“Test”是密钥的名称。我相信我的访问令牌是正确的,因为我能够获得Azure中的保险库列表。我不确定出了什么问题

我在Azure中的API注册拥有对密钥库的完全访问权限,并且在AAD中被列为所有者。密钥库列在所有网络上,即使是公共网络。有趣的是,如果我在azure文档中使用相同的参数,我会得到404响应,我相信这可能是问题的一部分


由于这不是管理API,是否可能需要对其他资源进行身份验证?

错误源于我提出的上一个问题。Azure密钥库的Rest API的资源是我使用的。但是,对这个URL使用直接HTTP请求并没有提供给我正确访问权限的令牌。我最终使用SDK与Azure Key Vault通信,即:

private async Task<string> GetAccessTokenAsync(string authority, string resource, string scope)
{
        var appCredentials = new ClientCredential(applicationId, clientSecret);
        var context = new AuthenticationContext(authority, TokenCache.DefaultShared);

        var result = await context.AcquireTokenAsync(resource, appCredentials);

        return result.AccessToken;
}
私有异步任务GetAccessTokenAsync(字符串权限、字符串资源、字符串范围)
{
var appCredentials=新的ClientCredential(applicationId,clientSecret);
var context=newauthenticationcontext(authority,TokenCache.DefaultShared);
var result=await context.AcquireTokenAsync(资源,appCredentials);
返回result.AccessToken;
}
其中,从SDK方法调用它,如下所示:

public async Task<string> GetKeyAsync(string vaultUrl, string vaultKey)
{
        var client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetAccessTokenAsync), new HttpClient());
        var secret = await client.GetKeyAsync(vaultUrl, vaultKey);

        return secret.Key.ToString();
}
公共异步任务GetKeyAsync(字符串vaultUrl,字符串vaultKey)
{
var client=new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetAccessTokenAsync),new HttpClient());
var secret=await client.GetKeyAsync(vaultUrl,vaultKey);
返回secret.Key.ToString();
}
从main调用

string res = (new Program()).GetSecretAsync("https://<myVault>.vault.azure.net/", keyName).Result;
string res=(新程序()).GetSecretAsync(“https://.vault.azure.net/“,键名)。结果;
还要注意,clientSecret和applicationId是类属性