При использовании devcontainers в проекте, в котором мы используем MSI для обмена данными между приложениями, мы используем DefaultAzureCredential
в качестве класса для загрузки либо с компьютера локального разработчика, либо на Azure MSI запущенный сервис. Чтобы это заработало, я обнаружил, что нам нужно добавить параметр includeInteractiveCredentials: true
в конструктор. Это приводит к тому, что окно браузера всплывает в момент нажатия на код (честно, довольно круто). Если у нас не было этого набора параметров, он не собирал никаких пользовательских кредитов для доступа к ресурсам.
Проблема, с которой мы сталкиваемся, заключается в том, что мы загружаем наше решение в его devcontainer * 1006. * вход в браузер, который обычно появляется во время отладки для получения учетных данных локального пользователя, не разрешается запускать. Вместо этого мы встречаемся со следующей ошибкой:
Azure.Identity: DefaultAzureCredential authentication failed. InteractiveBrowserCredential authentication failed. Microsoft.Identity.Client: Unable to open a web page using xdg-open. See inner exception for details. Possible causes for this error are: xdg-open is not installed or it cannot find a way to open an url - make sure you can open a web page by invoking from a terminal: xdg-open https://www.bing.com . System.Diagnostics.Process: No such file or directory.
Затем мы добавили xdg-utils
к нашему вызову apt-get
в нашем файле Docker, но теперь нас встретили с
/usr/bin/xdg-open: 870: /usr/bin/xdg-open: www-browser: not found
/usr/bin/xdg-open: 870: /usr/bin/xdg-open: links2: not found
/usr/bin/xdg-open: 870: /usr/bin/xdg-open: elinks: not found
/usr/bin/xdg-open: 870: /usr/bin/xdg-open: links: not found
/usr/bin/xdg-open: 870: /usr/bin/xdg-open: lynx: not found
/usr/bin/xdg-open: 870: /usr/bin/xdg-open: w3m: not found
xdg-open: no method available for opening 'https://login.microsoftonline.com/...'
Я зашел так далеко, что щелкнул ссылку / вставил ее в браузер моей операционной системы, вошел в систему, затем посмотрел на порт, который пытался выполнить обратный вызов (например, localhost:44663
), и сразу выполнение «прямого порта» из командной строки VSCode, но это также не помогло, сказав, что объект состояния не совпадает.
Кроме того, выполнение az login
w / в контейнере не устраняет проблему.
Как мы должны использовать локальные Azure учетные данные из контейнера Dev? Имейте в виду, что мы хотели бы избежать создания принципала службы в Azure только для того, чтобы локальная разработка работала.