我有一个天蓝色的功能。 要访问密钥保管库,它在云中运行时使用托管身份,但在本地运行时我尝试使用服务主体。
var credential = new DefaultAzureCredential();
我不断收到错误:
DefaultAzureCredential failed to retrieve a token from the included credentials. See the troubleshooting guide for more information. https://aka.ms/azsdk/net/identity/defaultazurecredential/troubleshoot
深入查看凭证对象,我看到环境凭证出现以下错误:
EnvironmentCredential authentication unavailable. Environment variables are not fully configured. See the troubleshooting guide for more information. https://aka.ms/azsdk/net/identity/environmentcredential/troubleshoot
我一定错过了一个步骤,所以希望得到一些帮助。到目前为止我采取的步骤是:
然而,在查看密钥库之前,在生成凭据时,会抛出错误。
我希望能得到一些关于为什么会发生这种情况的意见。
其他注意事项:
我遇到了同样的错误,所以我修改了代码并使用下面的代码,我可以用它来检索秘密:
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace FunctionApp136
{
public class Function1
{
private readonly ILogger<Function1> _logger;
public Function1(ILogger<Function1> logger)
{
_logger = logger;
}
[Function("Function1")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
string rith_clientId = Environment.GetEnvironmentVariable("RITH_CLIENT_ID", EnvironmentVariableTarget.User);
string rith_clientSecret = Environment.GetEnvironmentVariable("RITH_SECRET", EnvironmentVariableTarget.User);
string rith_tenantId = Environment.GetEnvironmentVariable("RITH_TENANT_ID", EnvironmentVariableTarget.User);
var credential = new ClientSecretCredential(rith_tenantId, rith_clientId, rith_clientSecret);
var vaultUrl = "https://testvaultvb.vault.azure.net/";
var rith_client = new SecretClient(new Uri(vaultUrl), credential);
var rith_Keyvault_secret = "test";
KeyVaultSecret rithout = rith_client.GetSecret(rith_Keyvault_secret);
Console.WriteLine("Secret is: " + rithout.Value);
return new OkObjectResult("Welcome to Azure Functions!");
}
}
}
在上面的代码中,我从用户那里获取了环境变量值。 要从系统变量中获取值,请使用此
Environment.GetEnvironmentVariable("RITH_CLIENT_ID", EnvironmentVariableTarget.Machine);
您需要使用机器代替用户。
Output: