Токен аутентификации Azure AD не проходит авторизацию веб-API - PullRequest
0 голосов
/ 29 мая 2019

У меня есть веб-API в Azure, для которого требуется авторизация, и я использую Azure AD для аутентификации учетных записей и создания токенов доступа.

Я могу успешно получить токены доступа из Azure AD с помощью ADAL для одной и той же учетной записи двумя различными способами, но только один из них авторизуется через web-api, а другой отказывает.

Следующее аутентифицирует учетную запись в интерактивном режиме, и токен авторизуется web-api

result = AuthenticationContext.AcquireTokenAsync(resource, clientId, redirectUri, new PlatformParameters(PromptBehavior)).Result;

где ресурс - это идентификатор приложения web-api (guid).

Ниже приводится аутентификация учетной записи неинтерактивно с заданным именем пользователя и паролем, но токен не авторизован веб-интерфейсом

UserPasswordCredential cred = new UserPasswordCredential(userName, password);
result = AuthenticationContext.AcquireTokenAsync(resource, clientId, cred).Result; 

где ресурс = https://{tenant}/{api имя}.

Вызов веб-API выглядит следующим образом:

HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
HttpResponseMessage response = await httpClient.GetAsync(ApplicationCallUri);

Оба способа возвращают идентичные объекты AuthenticationResult (кроме токенов и меток времени), и я не могу понять, почему авторизация не удалась для второго.

Ответ web-api: «В этом запросе отказано в авторизации».

Поскольку аутентификация проходит успешно в обоих направлениях, я предполагаю, что она должна быть на стороне веб-API. Помощь очень ценится. Спасибо.

1 Ответ

1 голос
/ 29 мая 2019

Благодаря juunas, которые указали параметр аудитории, я понял, что веб-API настроен на ожидание токенов только для одного из двух значений аудитории. Я добавил вторую опцию аутентификации на предъявителя, и она работает для обоих сценариев.

Спасибо, Юнас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...