接下来的步骤是:
Unhandled exception. System.Net.WebException: The remote server returned an error: (401) Unauthorized.
at System.Net.HttpWebRequest.GetResponse()
at KeyFromAzKeyVault.Program.FatchSecretKeyFromKeyVault(String token)
namespace KeyFromAzKeyVault
{
class Program
{
static void Main(string[] args)
{
var token = GetToken();
Console.WriteLine(token);
Console.WriteLine("*************FatchSecretKeyFromKeyVault from KV*********************");
string key = FatchSecretKeyFromKeyVault(token);
System.Console.WriteLine(key);
}
private static string FatchSecretKeyFromKeyVault(string token)
{
WebRequest kvrequest = WebRequest.Create("https://testkvaz203.vault.azure.net/secrets/testsecret/65c8c3b1e56e4a2fae0b6c8033c6b9ce?api-version=7.0");
kvrequest.Headers.Add("Authorization", "Bearer " + token);
WebResponse response = kvrequest.GetResponse();
return ParseWebResponse(response, "value");
}
private static string GetToken()
{
WebRequest request = WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net/");
request.Headers.Add("Metadata", "true");
request.Method = "GET";
WebResponse response = request.GetResponse();
return ParseWebResponse(response,"access_token");
}
private static string ParseWebResponse(WebResponse response, string tokenName)
{
string token = string.Empty;
using (Stream stream = response.GetResponseStream())
{
StreamReader streamResponse = new StreamReader(stream, Encoding.UTF8);
string stringResponse = streamResponse.ReadToEnd();
JObject JoResponse = JObject.Parse(stringResponse);
JValue Jobject = (JValue)JoResponse[tokenName];
token = Jobject.Value.ToString();
return token;
}
}
}
}
您可能需要从getToken()
WebRequest
中的资源查询字符串参数中删除尾随/。
更改webrequest请求=webrequest.create(“http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net/”);
到webrequest请求=webrequest.create(“http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net”);
当我测试这一点时,我在尝试连接到Key Vault时得到了下面的JSON错误响应,因此如果上面的操作不起作用,则捕获WebException
并检查其response
属性,以查看是否有其他细节。
{
"error": {
"code": "Unauthorized",
"message": "AKV10022: Invalid audience. Expected https://vault.azure.net, found: https://vault.azure.net/."
}
}
null 更新: 对于用户分配的标识,需要指定对象id或客户端id。
在我的azure app服务中,在app settings下,我添加了一个名为“something”的密钥,它的值指向密钥库的引用,如下所示: 现在,我可以从appsettings中检索值,但它将输出作为而不是实际值 我希望输出是我设置的值,而不是keyvault引用字符串本身。 我正在使用.NET MVC 4.7 web应用程序
获取"服务器验证请求失败。请确保包括签名在内的授权标头的值正确形成。"使用C#语言在Azure中尝试使用系统分配托管标识时出错。 接下来是步骤 创建了一个启用标识(系统分配)的新VM 使用存储帐户中的角色分配在IAM中添加虚拟机 能够使用C# 但在阅读blob时遇到异常,下面是异常的详细信息 课程 AzureCloudBlob类,用于使用系统分配的托管Idenitity访问令牌连接和读取blob
我没有找到任何关于在前端端实现逻辑来管理Azure密钥库的可能性的信息。同时,我创建了一个Node JS服务器项目使用ENV来管理Azure Key Vault,它工作成功,但我想在我的Angular应用程序中得到同样的效果。
我们如何从Typescript应用程序中获得对Azure密钥库秘密的访问。我们可以访问运行应用程序的VM。我们需要在Type script react应用程序中放置哪些步骤和代码来获得azure密钥库访问权限?