我正在尝试将针对.net框架的aspnet核心应用程序与Azure Keyvault连接。在支持身份的新azure vm上,一切正常,但此应用程序托管在不支持身份的经典azure vm上。我将系统环境变量AzureServiceAuthConnectionString设置为可以与Azure keyvault隔离的其他.net框架应用程序,它们已经在使用并且运行良好。
每次查看标准输出日志时,都会得到以下异常。
Azure.Identity.CredentialUnavailableException: DefaultAzureCredential failed to retrieve a token from the included credentials
EnvironmentCredential authentication unavailable. Environment variables are not fully configured
ManagedIdentityCredential authentication unavailable, the requested identity has not been assigned to this resource.
我在启动时使用以下代码:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights(ConfigurationManager.AppSettings["applicationInsightsInstrumentationKey"])
.ConfigureKestrel(options => options.AddServerHeader = false)
.UseIISIntegration()
.ConfigureAppConfiguration((context, config) =>
{
var vaultName = ConfigurationManager.AppSettings["VaultName"];
if (!string.IsNullOrEmpty(vaultName))
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
config.AddAzureKeyVault(
$"https://{vaultName}.vault.azure.net/",
keyVaultClient,
new DefaultKeyVaultSecretManager());
}
})
.UseStartup<Startup>();
在web.config中,以下各项:
<configSections>
<section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false"/>
</configSections>
<configBuilders>
<builders>
<add name="AzureKeyVault" vaultName="<#= this.VaultName #>" type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure, Version=2.0.0.0, Culture=neutral" vaultUri="https://<#= this.VaultName #>.vault.azure.net" />
</builders>
</configBuilders>
<connectionStrings configBuilders="AzureKeyVault">
<add name="ConnectionString" connectionString="" providerName="System.Data.SqlClient"/>
</connectionStrings>
答案 0 :(得分:5)
您能否验证您正在设置以下系统environment variables?
AZURE_CLIENT_ID
-服务主体的应用ID
AZURE_TENANT_ID
-主体的Azure Active Directory租户的ID
AZURE_CLIENT_SECRET
-服务主体的客户机密之一
答案 1 :(得分:1)
如果Visual Studio由于某种原因失去了它的Azure服务身份验证连接,或者您的实际AD凭据已更改(例如,密码更改),也会发生此错误。
在这种情况下,只需再次登录即可为我解决此问题:
在Visual Studio中,转到“工具”>“选项”。展开“ Azure服务身份验证”>“帐户选择”。如果看到“重新输入您的凭据”链接,请单击它并再次登录。如果没有,请尝试通过右上角的Visual Studio配置文件进行常规注销+登录。
答案 2 :(得分:1)
我在VS 2019应用程序中也遇到了这个问题。只需重新输入VS登录用户的凭据即可,该用户可以访问azure资源组。
我希望它将解决此问题。
答案 3 :(得分:0)
有一个针对这种类型的github问题
答案 4 :(得分:0)
如果您使用 IIS 而不是 IIS Express 在本地运行您的站点,您可能需要在您的 Azure 帐户凭据下运行站点的应用程序池标识,因此使用您在浏览器中登录到 portal.azure 的确切凭据.com 或 dev.azure.com。您的 PAT 不起作用。
设置完成后,回收应用程序池。
然后转到 %windir%\System32\inetsrv\config\applicationHost.config
搜索“setProfileEnvironment”。如果设置为“false”,请将其更改为“true”。
如果不存在,将其添加到 applicationPoolDefaults 标签下,即
<applicationPoolDefaults managedRuntimeVersion="v4.0">
<processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" />
</applicationPoolDefaults>