Я создал мультитенантный веб-API, который отлично работает. Теперь я хочу создать собственный клиент для тестирования. Приложение веб-API определяется в одном арендаторе. Тестовое приложение определено в другом клиенте, который дал согласие администратора на использование веб-API.
Я хочу использовать собственное приложение для аутентификации с помощью имени пользователя и пароля в моих (неинтерактивных) интеграционных тестах. Я не могу использовать аутентификацию только по сертификату/приложению, потому что мне нужен реальный пользовательский контекст.
Получение токена
var userCredential = new UserCredential("[email protected]", "password");
var context = new AuthenticationContext("https://login.windows.net/common");
return context.AcquireToken("https://webapitenant.onmicrosoft.com/webApiResourceUri", testClientId, userCredential).AccessToken;
Проблема с этим кодом заключается в том, что он не работает, пока я не даю согласие администратора на собственное приложение, даже если пользователь находится в том же клиенте, что и регистрация приложения.
Исключение:
'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException' in Microsoft.IdentityModel.Clients.ActiveDirectory.dll
Additional information:
AADSTS65001: The user or administrator has not consented to use the application with ID 'nativeclientid'. Send an interactive authorization request for this user and resource.
Поскольку тесты не интерактивны, мне нужно создать консольное приложение, использующее приведенный выше код, но с PromptBehaviour.Always
. Это запросит у меня имя пользователя и пароль и покажет форму согласия. После того, как я даю согласие, начинают работать тесты, использующие ту же регистрацию нативного приложения.
Есть ли способ принять форму согласия без интерактивного графического интерфейса?