来自本地主机 C# Web API - 从 Azure KeyVault 访问机密会引发错误 Invalid Issuer
From localhost C# Web API - Accessing secret from Azure KeyVault throws error Invalid Issuer
我正在尝试从我的本地网络 api,使用 Azure.Identity 库从 KeyVault 检索机密。
但它抛出无效的发行人。在下面给出我正在使用的代码
我现在的代码
var client = new SecretClient(new Uri("key-vault-url"), new DefaultAzureCredential()); ==> line #1
var secret = client.GetSecret("DicomSecret").Value; ==> line #2
一旦它解析第 2 行,它就会抛出以下错误。
我试过的
- 我已通过“添加访问策略”在 KeyVault 中添加我的 Azure 凭据
- 尝试在第 1 行中使用 ManagedIdentityCredential 而不是 DefaultAzureCredential
- 还尝试在第 1 行中使用 VisualStudioCredential 而不是 DefaultAzureCredential
我还读到我可以使用 EnvironmentCredential,为此我需要提供 AZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET,但我不确定如何提供以及包括哪些内容这 - 我无权访问 AAD。
请告诉我如何解决这个问题。
这是我的代码,和你的好像没什么区别。
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Identity.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace test0430callingapi.Controllers
{
public class HelloController : Controller
{
public async Task<string> IndexAsync()
{
const string secretName = "clientsecret";
var kvUri = "https://keyvaultname.vault.azure.net/";
var a = new DefaultAzureCredential();
var client = new SecretClient(new Uri(kvUri), a);
var secret = await client.GetSecretAsync(secretName);
string secretVaule = secret.Value.Value;
return secretVaule ;
}
}
}
然后我认为您可以尝试检查 DefaultAzureCredential. When running the code in visual studio,我们需要确保您已通过门户中的添加访问策略以具有访问 Azure Key Vault 权限的用户身份登录。或者你已经添加了用户,那么你可以检查是否为用户添加了足够的权限。
如果也失败了,您可以通过api尝试另一种访问密钥库的方法。更多详情可以参考.
由于我尝试从我的本地开发环境 (VS 2019) 连接到 Azure,因此需要额外的凭据。
所以在我的开发环境 (localhost) 中,我不得不使用
DefaultAzureCredentialOptions VisualStudioTenantId 和 SecretClient。
var tenantId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
DefaultAzureCredentialOptions options = new DefaultAzureCredentialOptions()
{
VisualStudioTenantId = tenantId,
SharedTokenCacheTenantId = tenantId
};
var client = new SecretClient(
new Uri(key-vault-url),
new DefaultAzureCredential(options)
);
以上帮助我从本地执行,但在将其部署到 Azure Ap 服务后,下面的代码行就足够了。所以我只使用上面的代码进行本地测试。
var client = new SecretClient(new Uri("key-vault-url"), new DefaultAzureCredential());
我正在尝试从我的本地网络 api,使用 Azure.Identity 库从 KeyVault 检索机密。 但它抛出无效的发行人。在下面给出我正在使用的代码
我现在的代码
var client = new SecretClient(new Uri("key-vault-url"), new DefaultAzureCredential()); ==> line #1
var secret = client.GetSecret("DicomSecret").Value; ==> line #2
一旦它解析第 2 行,它就会抛出以下错误。
我试过的
- 我已通过“添加访问策略”在 KeyVault 中添加我的 Azure 凭据
- 尝试在第 1 行中使用 ManagedIdentityCredential 而不是 DefaultAzureCredential
- 还尝试在第 1 行中使用 VisualStudioCredential 而不是 DefaultAzureCredential
我还读到我可以使用 EnvironmentCredential,为此我需要提供 AZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET,但我不确定如何提供以及包括哪些内容这 - 我无权访问 AAD。
请告诉我如何解决这个问题。
这是我的代码,和你的好像没什么区别。
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Identity.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace test0430callingapi.Controllers
{
public class HelloController : Controller
{
public async Task<string> IndexAsync()
{
const string secretName = "clientsecret";
var kvUri = "https://keyvaultname.vault.azure.net/";
var a = new DefaultAzureCredential();
var client = new SecretClient(new Uri(kvUri), a);
var secret = await client.GetSecretAsync(secretName);
string secretVaule = secret.Value.Value;
return secretVaule ;
}
}
}
然后我认为您可以尝试检查 DefaultAzureCredential. When running the code in visual studio,我们需要确保您已通过门户中的添加访问策略以具有访问 Azure Key Vault 权限的用户身份登录。或者你已经添加了用户,那么你可以检查是否为用户添加了足够的权限。
如果也失败了,您可以通过api尝试另一种访问密钥库的方法。更多详情可以参考
由于我尝试从我的本地开发环境 (VS 2019) 连接到 Azure,因此需要额外的凭据。
所以在我的开发环境 (localhost) 中,我不得不使用 DefaultAzureCredentialOptions VisualStudioTenantId 和 SecretClient。
var tenantId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
DefaultAzureCredentialOptions options = new DefaultAzureCredentialOptions()
{
VisualStudioTenantId = tenantId,
SharedTokenCacheTenantId = tenantId
};
var client = new SecretClient(
new Uri(key-vault-url),
new DefaultAzureCredential(options)
);
以上帮助我从本地执行,但在将其部署到 Azure Ap 服务后,下面的代码行就足够了。所以我只使用上面的代码进行本地测试。
var client = new SecretClient(new Uri("key-vault-url"), new DefaultAzureCredential());