Как получить accessToken к моей службе приложений Azure из кода MSTest c #

У меня есть веб-приложение для вызовов API (без пользовательского интерфейса, только служба), и я пишу проект MSTest для тестирования API. Это моя конфигурация AuthConfiguration внутри кода веб-приложения:

 public static void ConfigureWebApiAuth(IAppBuilder app){
        // User Authentication
        app.UseWindowsAzureActiveDirectoryBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions
            {
                TokenValidationParameters = UserAuthTokenValidationParameters,
                MetadataAddress =   AadApplicationMetadataAddress,
                TokenHandler = new JwtSecurityTokenHandler()
            });
}
        public static TokenValidationParameters UserAuthTokenValidationParameters = new TokenValidationParameters()
        {
            ValidAudience = AadApplicationClientId,
            ValidateIssuer = false,
            AuthenticationType = UserContext,
        };

Как я могу создать подходящий токен из моего MSTest?

Я пытался:

    AzureServiceTokenProvider localToken = new AzureServiceTokenProvider();
    var token = await getTokenProvider().GetAccessTokenAsync("https://xxx.azurewebsites.net");

также:

AccessToken token =
    await new DefaultAzureCredential()
    .GetTokenAsync(
        new TokenRequestContext(
            new[] { "https://xxx.azurewebsites.net/.default" }
        ));

Он работает только с https://storage.azure.com/, https://vault.azure.net/ и т. д., а не с моим URL-адресом службы приложения. Я получаю сообщение об ошибке:

Параметры: Строка подключения: [Строка подключения не указана], Ресурс: https://xxxxx.azurewebsites.net, Орган власти: . Пробовали следующие 3 метода получить токен доступа, но ни один из них не помог. Пытался получить токен с помощью Managed Service Identity. Не удалось получить токен доступа. Попытка выполнить операцию сокета в недоступной сети. Сообщение об исключении: попытка получить токен с помощью Visual Studio. Не удалось получить токен доступа. Исключение для поставщика токенов Visual Studio Microsoft.Asal.TokenService.exe: TS003: ошибка, TS004: невозможно получить токен доступа. Сообщение об исключении «Не удалось обновить токен доступа»: попытка получить токен с помощью Azure CLI. Не удалось получить токен доступа. 'az' не распознается как внутренняя или внешняя команда, работающая программа или командный файл.


person RoG    schedule 24.03.2021    source источник
comment
Вы создаете токен для тестирования, войдя в API так же, как и ваше приложение. Нет (или не должно быть) просто работающего «волшебного» токена. Вы должны создать «тестовую» учетную запись с именем пользователя / паролем / учетными данными и использовать ее для входа в систему, чтобы сгенерировать токен.   -  person Neil    schedule 24.03.2021
comment
Могу ли я использовать управляемое удостоверение, назначенное пользователем? Я создал его и добавил на вкладку «Идентификация» своего веб-приложения.   -  person RoG    schedule 24.03.2021
comment
Если вы используете конечную точку v2.0, область должна быть {your_client_id}/.default. Не могли бы вы попробовать?   -  person Pamela Peng    schedule 25.03.2021


Ответы (1)


scope/resource в вашем коде неверен. И есть статья для вам понять.

var azureServiceTokenProvider = new AzureServiceTokenProvider();
string apiToken = await azureServiceTokenProvider.GetAccessTokenAsync("your API's client id/app id or App ID URI");

При использовании конечной точки v2.0 область должна быть добавлена ​​/.default.

person Pamela Peng    schedule 25.03.2021