Я пытаюсь подключить службу приложений к базе данных Azure Sql. Я могу git хорошо работать с Системными Назначенными Идентификациями с тем же кодом, но я предпочитаю использовать Пользовательские Идентификации (UAI), но я не могу заставить его работать.
Шаги, которые я делаю:
- Создание UAI через портал с именем UAI "uai-dev-appname-001"
- На вкладке «Идентификация» службы приложений Azure я выбрал «Назначенный пользователем идентификатор» и выбрал UAI, сделанный на предыдущем шаге.
- Запустил следующий SQL CMD
CREATE USER [uai-dev-appname-001] FROM EXTERNAL PROVIDER
ALTER ROLE db_datareader ADD MEMBER [uai-dev-appname-001]
ALTER ROLE db_datawriter ADD MEMBER [uai-dev-appname-001]
Установить строку подключения в ASP. NET на:
Источник данных = sqlsrv-name-dev-001.database. windows .net; Исходный каталог = sqldb-name-dev-001;
Использование следующего кода в моем ASP. NET Core:
SqlConnection connection = new SqlConnection
{
ConnectionString = configuration.GetConnectionString("nameDatabase")
};
AzureServiceTokenProvider provider = new AzureServiceTokenProvider();
var token = provider.GetAccessTokenAsync("https://database.windows.net/").Result;
connection.AccessToken = token;
Разверните в Azure Службу приложений и просмотрите URL. Результат: ошибка 500.30 Поиск в журнале событий приложений:
Необработанное исключение. System.AggregateException: произошла одна или несколько ошибок. (Параметры: Строка подключения: [Строка подключения не указана], Ресурс: https://database.windows.net, Полномочия:. Сообщение об исключении: Попробовал следующие 3 метода для получения токена доступа, но ни один из них не работал. Параметры: Строка подключения: [Строка подключения не указана], Ресурс: https://database.windows.net, Полномочия:. Сообщение об исключении: Попытка получить токен с использованием идентификатора управляемой службы. Не удалось получить токен доступа. Получена ошибка, не подлежащая повторению MSI ResponseCode: BadRequest, Response: {"StatusCode": 400, "Message": "MSI не найден для указанного ClientId / ResourceId.", "CorrelationId": "a68bf757-518a-42e1-85a9-342320d39b5a"} Параметры: соединение Строка: [Строка подключения не указана], Ресурс: https://database.windows.net, Полномочия:. Сообщение об исключении: Попытка получить токен с помощью Visual Studio. Не удалось получить токен доступа. Файл поставщика токена Visual Studio не найден в «D: \ local \ LocalAppData.IdentityService \ AzureServiceAuth \ tokenprovider. json» Параметры: Строка подключения: [Нет подключения указанная строка], Ресурс: https://database.windows.net, Полномочия:. Сообщение об исключении: Попытка получить токен с помощью Azure CLI. Не удалось получить токен доступа. 'az' не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл.
Самая интересная часть в IMO:
Ответ: {"StatusCode": 400, "Сообщение": "MSI не найден для указанного ClientId / ResourceId.", "CorrelationId": "a68bf757-518a-42e1-85a9-342320d39b5a"}
Мой вопрос:
- Работают ли назначенные пользователем идентификаторы с Azure SQL?
- Если так, что я делаю неправильно?
- У кого-то есть рабочий пример.