Получение токена доступа для хранилища ключей

Я опубликовал локальное веб-приложение и подключил его к IIS.

Когда я пытаюсь перейти на сайт, он не запускается со следующей ошибкой при попытке доступа к keyvault:

Исключение при запуске приложения:

Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException: Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47. Exception Message: Tried the following 3 methods to get an access token, but none of them worked. Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47. Exception Message: Tried to get token using Managed Service Identity.

Unable to connect to the Managed Service Identity (MSI) endpoint.

Please check that you are running on an Azure resource that has MSI setup.

Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47.

Exception Message: Tried to get token using Visual Studio.

Access token could not be acquired. Visual Studio Token provider file not found at "C:\WINDOWS\system32\config\systemprofile\AppData\Local.IdentityService\AzureServiceAuth\tokenprovider.json"

Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47. config (most recent call last):
File "runpy.py", line 193, in _run_module_as_main
File "runpy.py", line 85, in _run_code
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-qw7dqhq0\azure-cli\azure\cli__main__.py", line 32, in File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-qw7dqhq0\azure-cli-core\azure\cli\core__init__.py", line 511, in get_default_cli
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-qw7dqhq0\azure-cli-core\azure\cli\core__init__.py", line 34, in init
File "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\knack\cli.py", line 82, in init self.config = config_cls(config_dir=config_dir, config_env_var_prefix=config_env_var_prefix) File "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\knack\config.py", line 38, in init ensure_dir(config_dir)
File "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\sitepackages\knack\util.py", line 38, in ensure_dir os.makedirs(d)
File "os.py", line 220, in makedirs PermissionError: [WinError 5] Access is denied: 'C:\WINDOWS\system32\config\systemprofile\.azure'

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
5
0
6 278
3

Ответы 3

Как упоминалось в этом документе Управляемая независимость службы, удостоверение управляемой службы работает только в среде Azure и только в развертывании службы приложений, в котором вы его настроили.

Примечание: MSI выполняет развертывание службы приложений не работать сслот в это время.

Перед кодированием нам нужно настраивать кое-что в Azure:

1. включить управляемую идентификацию службы в веб-приложении

2. Разрешите сгенерированному субъекту-службе доступ к производственному хранилищу ключей.

Вот мой код для получения токена, и он хорошо работает:

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

Для получения дополнительных сведений о том, как получить Azure KeyVault с MSI в Asp.net Core, вы можете обратиться к этому статья.

Но когда я запускаю сайт через Visual Studio, он работает нормально. Просто когда я публикую его в папке, а затем подключаю папку к IIS, а затем нажимаю ее из браузера, я получаю эту ошибку. Итак, почему он работает с Visual Studio, а не с IIS? Спасибо за помощь :)

user3911247 26.10.2018 05:29

@ user3911247, в Visual Studio вы можете установить Azure Services Authentication Extension, который сможет получить информацию о вашей учетной записи. Когда вы предоставляете доступ к хранилищу ключей для своей учетной записи, вы можете успешно получить токен доступа. Пока у IIS нет расширения. Для получения дополнительной информации вы можете обратиться к этому проблема и этому статья.

Joey Cai 29.10.2018 06:50

У меня возникла эта проблема, и я наконец обнаружил, что не вошел в Azure локально.

Что решило проблему для меня, так это загрузка Azure CLI на мой компьютер и запуск

az login

и просто следуйте за полученными страницами для входа в систему. Запустите свое приложение, и вы должны обнаружить, что оно теперь подключается.

Если вы пытаетесь использовать аутентификацию AAD на основе пользователей при работе с полным локальным хостом IIS, вы должны следовать этим инструкциям, чтобы настроить свой профиль пользователя для запуска пула приложений IIS:

Не удается получить токены при отладке приложения в IIS

  • Configure the Application Pool for the web app to run as your current user account. See more information here
  • Configure "setProfileEnvironment" to "True". See more information here.
    • Go to %windir%\System32\inetsrv\config\applicationHost.config
    • Search for "setProfileEnvironment". If it's set to "False", change it to "True". If it's not present, add it as an attribute to the processModel element (/configuration/system.applicationHost/applicationPools/applicationPoolDefaults/processModel/@setProfileEnvironment), and set it to "True".

Как только это будет настроено, воспользуйтесь другими советами, найденными здесь либо войдет в AzCli, либо в VisualStudio App Authentication.

Другие вопросы по теме