我正在尝试将面向.net framework的aspnet核心应用程序与Azure Keyvault连接。在支持标识的新Azure虚拟机上,一切都运行正常,但此应用程序托管在不支持标识的经典Azure虚拟机上。我创建了系统环境变量AzureServiceAuthConnectionString,其他具有Azure Keyvault的.net framework应用程序已经在使用该变量,并且运行正常。
查看我的stdout日志时,我每次都会遇到以下异常。
Azure.身份.凭据不可用异常:DefaultAzureCredential无法从包含的凭据中检索令牌环境凭据身份验证不可用。环境变量未完全配置ManagedIdentityCredential身份验证不可用,请求的身份尚未分配给此资源。
我在启动中使用了下面的代码:
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>
8条答案
按热度按时间6ie5vjzr1#
如果Visual Studio由于某种原因丢失了Azure服务身份验证连接,或者你的实际AD凭据已更改(例如密码更改),也可能发生此错误。
在这种情况下,只需再次登录即可解决此问题:
在Visual Studio中,转到"工具“〉”选项“。展开“Azure服务身份验证”〉“帐户选择”。如果看到“重新输入凭据”链接,请单击该链接并再次登录。如果没有,请尝试通过右上角的Visual Studio配置文件进行常规注销+登录。
bvn4nwqk2#
能否验证您正在设置以下系统环境变量?
AZURE_CLIENT_ID
-服务主体的应用程序IDAZURE_TENANT_ID
-主体的Azure Active Directory租户的IDAZURE_CLIENT_SECRET
-服务主体的客户端机密之一tuwxkamq3#
在VS 2019应用中,对我来说,可以重新输入VS登录用户的凭据,该用户可以访问Azure资源组。
rnmwe5a24#
如果您使用IIS而不是IIS Express在本地运行站点,则可能需要在您的Azure帐户凭据下运行站点的应用程序池标识,以便使用您在浏览器中登录www.example.com或dev.azure.com所使用的确切凭据portal.azure.com。您的PAT将不起作用。
设置完成后,请回收应用程序池。
然后转到
%windir%\System32\inetsrv\config\applicationHost.config
搜索
setProfileEnvironment
。如果设置为false
,则将其更改为true
。如果不存在,请将其添加到applicationPoolDefaults标记下,即
pu82cl6c5#
对我来说,这只是第一个异常,进一步深入(Continue =〉Continue =〉Continue),我最终得到了真实的的异常:
'az'未被识别为内部或外部命令'
原来我忘了在我的机器上安装Azure CLI!
一旦我这样做了,我仍然得到了原来的'CredentialUnavailableException',但它的处理(不知道为什么我的调试器是打破了它,但这是另一个故事)和一切工作。
This StackOverflow link helped.
lqfhib0f6#
我按照下面的步骤修复了这个问题。请确保您有Azure门户的访问权限和所需的资源。
1.安装Azure客户端
1.以管理员身份打开PowerShell
1.使用az login命令登录Azure
1.以管理员身份打开Visual Studio
vzgqcmou7#
这意味着IDE无法从您的构建环境/容器中找到Azure凭据。如果注销/登录方法不起作用,则从您的终端:
az login
使用您的凭据登录并重新运行程序。
zqdjd7g98#
调试IIS中承载的Web服务时,请记住将应用程序池标识设置为您自己的帐户。
经过几个小时的尝试,我偶然发现了这个,下面的代码确实把我推向了正确的方向。
无法在以下位置访问Visual Studio令牌提供程序:c:\windows\system32\inetsrv.IdentityService\AzureServiceAuth\tokenprovider.json
当然,这是默认应用程序池身份系统:(