Azure Key Vault Rest API获取密钥401



我正在尝试利用Azure密钥库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;
}

我称之为

var test = GetKey(
@"https://<myVault>.vault.azure.net/keys/Test/1?api-version=2016-10-01",
token
);

其中"Test"是密钥输入的名称。我相信我的访问令牌是正确的,因为我能够获得Azure中的金库列表。我不确定出了什么问题。

我在Azure中的API注册可以完全访问密钥库,并在AAD中列为所有者。密钥库在所有网络上都列出,甚至是公共网络。然而,有趣的是,如果我在azure文档中使用具有相同参数的"尝试"功能,我会得到404响应,我认为这可能是问题的一部分?

由于这不是一个管理API,我是否可能需要对不同的资源进行身份验证?

错误源于我提出的最后一个问题。Azure密钥保管库的Rest API的资源为https://vault.azure.net/而我使用https://management.azure.com/.然而,使用对该URL的直接HTTP请求并没有提供一个令牌来给我正确的访问权限。我最终使用SDK与Azure密钥库进行通信,即:

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;
}

其中它从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();
}

从主目录调用

string res = (new Program()).GetSecretAsync("https://<myVault>.vault.azure.net/", keyName).Result;

还要注意,clientSecret和applicationId是类属性。

最新更新