提取密钥保险库的访问令牌

时间:2018-10-24 09:37:04

标签: azure iis azure-web-app-service azure-keyvault

我已经在本地发布了一个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'

4 个答案:

答案 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失败。

我想解释一下。