我正在从Azure VM运行我的应用程序,并尝试与KeyVault连接。但是我遇到了异常
参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/1e465dc8-5f36-4ab9-9a49-57cbfdcfdf9a。异常消息:尝试了以下三种方法来获取访问令牌,但没有一种有效。
参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/1e465dc8-5f36-4ab9-9a49-57cbfdcfdf9a。异常消息:尝试使用托管服务身份获取令牌。无法连接到托管服务标识(MSI)端点。请检查您是否正在运行具有MSI安装程序的Azure资源。
参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/1e465dc8-5f36-4ab9-9a49-57cbfdcfdf9a。异常消息:尝试使用Visual Studio获取令牌。无法获取访问令牌。 Visual Studio令牌提供者Microsoft.Asal.TokenService.exe的异常:TS003:错误,TS001:此帐户“用户名”需要重新认证。请转到“工具”->“ Azure Services身份验证”,然后重新验证您要使用的帐户。
参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/1e465dc8-5f36-4ab9-9a49-57cbfdcfdf9a。异常消息:尝试使用Azure CLI获取令牌。无法获取访问令牌。无法将“ az”识别为内部或外部命令, 可操作的程序或批处理文件。
我已经检查了先决条件,例如- 1.在VM的相同资源组中创建KeyVault,并添加2个机密。 2.检查该VM是否已在Active Directory中注册,并且具有系统分配的身份。 3.添加了允许向虚拟机读取和列出机密的访问策略。
这里是代码,我想念的是
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = keyVaultClient.GetSecretAsync($"https://vaultname.vault.azure.net/Secrets/connString").Result.Value;
答案 0 :(得分:0)
错误表示身份验证问题,因此需要依次验证两件事;
Invoke-RestMethod -Headers @{"Metadata"="true"} -URI "http://169.254.169.254/metadata/instance/compute/vmId?api-version=2017-08-01&format=text" -Method get`
如果以上查询成功,则检查元数据服务上的Identity API,但如果失败,则VM与Azure环境之间存在通信问题。
Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -Headers @{Metadata="true"}
如果以上查询成功,则表明MSI没有问题。
答案 1 :(得分:0)
问题出在Microsoft.Azure.Services.AppAuthentication上的nuget版本。 1.0.3版解决了这个问题。
答案 2 :(得分:0)
我正在使用 nuget 包 Azure.Identity 版本 1.3 并遇到了同样的问题 TS003、TS001,所以我尝试将版本降级到 1.2.2 并且它有效