我已经在本地发布了一个Web应用程序,并将其连接到IIS。
当我尝试导航到站点时,它在启动时失败,并尝试访问 keyvault 时出现以下错误:
应用程序启动异常:
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException: 参数:连接字符串:[未指定连接字符串], 资源:https://vault.azure.net,权限: https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47。 异常消息:尝试了以下三种方法来获得访问权限 令牌,但没有一个起作用。参数:连接字符串:[否 指定的连接字符串],资源:https://vault.azure.net, 权威: https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47。 异常消息:尝试使用托管服务身份获取令牌。
无法连接到托管服务标识(MSI)端点。
请检查您是否在具有MSI的Azure资源上运行 设置。
参数:连接字符串:[未指定连接字符串], 资源:https://vault.azure.net,权限: https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47。
异常消息:尝试使用Visual Studio获取令牌。
无法获取访问令牌。 Visual Studio令牌提供程序文件 在找不到 “ C:\ WINDOWS \ system32 \ config \ systemprofile \ AppData \ Local.IdentityService \ AzureServiceAuth \ tokenprovider.json”
参数:连接字符串:[未指定连接字符串], 资源:https://vault.azure.net,权限: https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47。配置 (最近通话过去):
_run_module_as_main中的文件“ runpy.py”,第193行
_run_code
中的文件“ runpy.py”,第85行 第32行的文件“ C:\ Users \ VSSADM〜1 \ AppData \ Local \ Temp \ pip-install-qw7dqhq0 \ azure-cli \ azure \ cli__main __。py” get_default_cli中的文件``C:\ Users \ VSSADM〜1 \ AppData \ Local \ Temp \ pip-install-qw7dqhq0 \ azure-cli-core \ azure \ cli \ core__init __。py'',第511行 init 中的文件“ C:\ Users \ VSSADM〜1 \ AppData \ Local \ Temp \ pip-install-qw7dqhq0 \ azure-cli-core \ azure \ cli \ core__init __。py”,第34行。
文件“ C:\ Program Files(x86)\ Microsoft SDKs \ Azure \ CLI2 \ Lib \ site-packages \ knack \ cli.py”,第82行,位于 init self.config = config_cls(config_dir = config_dir,config_env_var_prefix = config_env_var_prefix) 文件“ C:\ Program Files(x86)\ Microsoft SDKs \ Azure \ CLI2 \ Lib \ site-packages \ knack \ config.py”, 第38行, init 中,请确保(_dir(config_dir)
确保文件“ C:\ Program Files(x86)\ Microsoft SDKs \ Azure \ CLI2 \ Lib \ sitepackages \ knack \ util.py”第38行,位于sure_dir os.makedirs(d)
makedirs中的文件“ os.py”,第220行,PermissionError:[WinError 5]访问被拒绝: 'C:\ WINDOWS \ system32 \ config \ systemprofile \ .azure'
答案 0 :(得分:2)
我遇到了这个问题,最后发现我没有本地登录到Azure。
为我解决的问题是将Azure CLI下载到我的计算机上并运行
az login
,只需按照结果页面登录即可。运行您的应用程序,您应该会发现它现在已连接。
答案 1 :(得分:1)
如果在运行完整的IIS localhost时尝试使用基于用户的AAD身份验证,则必须按照以下说明来配置用户配置文件以运行IIS应用程序池:
Can't retrieve tokens when debugging app in IIS
- 为Web应用程序配置应用程序池,使其以您当前的用户帐户身份运行。查看更多信息here
- 将“ setProfileEnvironment”配置为“ True”。查看更多信息here。
- 转到%windir%\ System32 \ inetsrv \ config \ applicationHost.config
- 搜索“ setProfileEnvironment”。如果将其设置为“ False”,则将其更改为“ True”。如果不存在,请将其作为属性添加到processModel元素(/configuration/system.applicationHost/applicationPools/applicationPoolDefaults/processModel/@setProfileEnvironment),并将其设置为“ True”。
配置完成后,use the other tips found here可以登录AzCli或VisualStudio应用程序身份验证。
答案 2 :(得分:0)
如本文档Managed Service Indentity中所述,托管服务标识仅在Azure环境中有效,并且仅在配置了该身份的App Service部署中有效。
注意:此时,MSI 不适用于应用服务部署插槽。
在编码之前,我们需要在Azure中setup:
1。在Web应用程序上启用托管服务身份
2。允许生成的服务主体访问生产密钥保管库
这是我获取令牌的代码,它运行良好:
id | a_time | b_time | c_time | d_time | metadata1 | metadata2
1 | 8 | 7 | 2 | 4 | a | b
2 | 6 | 1 | 12 | 10 | c | d
3 | 5 | 9 | 3 | 11 | e | f
有关如何在Asp.net Core中获取带有MSI的Azure KeyVault的详细信息,请参考此article。
答案 3 :(得分:0)
这困扰了我。已记录的机制无法在IIS上使用,但在IISExpress上可以使用。
我已正确使用az登录名和az帐户设置。
当我逐步执行标准代码时...
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
_kvClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
第一次调用GetSecretAsync
使用IISExpress,但使用IIS失败。
我想解释一下。