获取密钥库的访问令牌

use*_*247 5 iis azure azure-keyvault azure-web-app-service

我在本地发布了一个 Web 应用程序并将其连接到 IIS。

当我尝试导航到该站点时,它在尝试访问密钥库时在启动时失败并出现以下错误:

应用程序启动异常:

Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException:参数:连接字符串:[未指定连接字符串],资源:https : //vault.azure.net,权限:https : //login.windows.net/72f988bf-86f1- 41af-91ab-2d7cd011db47。异常消息:尝试了以下 3 种方法来获取访问令牌,但都没有奏效。参数:连接字符串:[未指定连接字符串],资源: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 获取令牌。

无法获取访问令牌。在“C:\WINDOWS\system32\config\systemprofile\AppData\Local.IdentityService\AzureServiceAuth\tokenprovider.json”中找不到 Visual Studio 令牌提供程序文件

参数:连接字符串:[未指定连接字符串],资源:https : //vault.azure.net,权限:https : //login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47。配置(最近一次调用):
文件“runpy.py”,第 193 行,在 _run_module_as_main
文件“runpy.py”,第 85 行,在 _run_code
文件“C:\Users\VSSADM~1\AppData\Local\Temp\pip -install-qw7dqhq0\azure-cli\azure\cli__main__.py”,第 32 行,在文件“C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-qw7dqhq0\azure-cli-core\azure”中\cli\core__init__.py”,第 511 行,在 get_default_cli
文件“C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-qw7dqhq0\azure-cli-core\azure\cli\core__init__.py”中,第 34 行,在init 中
文件“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 ensure_dir(config_dir)
文件“C:\Program Files (x86) \Microsoft SDKs\Azure\CLI2\Lib\sitepackages\knack\util.py”,第 38 行,在 ensure_dir os.makedirs(d)
文件“os.py”,第 220 行,在 makedirs 中 PermissionError: [WinError 5] Access is拒绝:'C:\WINDOWS\system32\config\systemprofile\.azure'

Lia*_*iam 13

遇到了这个问题,最后发现本地没有登录Azure。

为我解决问题的是将 Azure CLI 下载到我的机器并运行

az login
Run Code Online (Sandbox Code Playgroud)

只需按照结果页面登录。运行您的应用程序,您应该发现它现在已连接。


fel*_*ckz 8

如果您在运行完整 IIS 本地主机时尝试使用基于用户的 AAD 身份验证,则必须按照以下说明配置用户配置文件以运行 IIS 应用程序池:

在 IIS 中调试应用程序时无法检索令牌

  • 配置 Web 应用程序的应用程序池以您当前的用户帐户运行。在这里查看更多信息
  • 将“setProfileEnvironment”配置为“True”。请在此处查看更多信息。
    • 转到%windir%\System32\inetsrv\config\applicationHost.config
    • 搜索“setProfileEnvironment”。如果它设置为“False”,请将其更改为“True”。如果它不存在,请将其作为属性添加到 processModel 元素 (/configuration/system.applicationHost/applicationPools/applicationPoolDefaults/processModel/@setProfileEnvironment),并将其设置为“True”。

配置完成后,请使用此处找到的其他提示登录 AzCli 或 VisualStudio 应用程序身份验证。

另外仅供参考 - 如果您的用户使用单独的用户帐户提升为管理员来运行 Visual Studio / IIS - 他们在向 CLI 进行身份验证时还必须使用同一用户提升其命令提示符


Joe*_*Cai 0

如本文档托管服务标识中所述,托管服务标识仅在 Azure 环境内工作,并且仅在您配置它的应用服务部署中工作。

注意:MSI目前不适用于应用服务部署槽。

在编码之前,我们需要在 Azure 中进行一些设置:

1.在Web应用程序上启用托管服务身份

2.允许生成的服务主体访问生产密钥保管库

这是我获取令牌的代码,它运行良好:

var azureServiceTokenProvider = new AzureServiceTokenProvider();
string token = await azureServiceTokenProvider.GetAccessTokenAsync("https://vault.azure.net");
Run Code Online (Sandbox Code Playgroud)

有关如何在 Asp.net Core 中通过 MSI 获取 Azure KeyVault 的更多详细信息,您可以参考这篇文章