Ошибки при обновлении ADAL с 2.22 до 5.0.5 - PullRequest
2 голосов
/ 24 мая 2019

У меня есть клиент WPF, использующий ADAL для получения токенов из ADFS для вызова нашего веб-API. Он использует текущего пользователя Windows, вошедшего в систему, и аутентифицируется в ADFS без экрана входа в систему или подсказок. Тем не менее, после обновления с 2.22.302111727 до 5.0.5 у меня возникают проблемы, заставляющие это работать. Я хочу выполнить обновление, чтобы иметь возможность настроить таргетинг на .NET Standard в моей библиотеке аутентификации.

Существующий код с 2.22 был

var ac = new AuthenticationContext(authority, false);
var token = ac.AcquireToken(resourceURI, clientId, new Uri(clientReturnUri), PromptBehavior.Never);

При обновлении до 5.0.5 API изменился незначительно, и я следовал документации для тихого получения токенов с использованием встроенной аутентификации в Windows (Kerberos) , что приводит к

var ac = new AuthenticationContext(authority, false);
var token = await ac.AcquireTokenAsync(resourceURI, clientId, new UserCredential());

это приводит к исключению

Произошла ошибка при десериализации объекта типа Microsoft.IdentyModel.Clients.ActiveDirectory.Internal.Oauth2.TokenResponse. Обнаружен неожиданный символ '>'.

, что говорит о том, что было возвращено какое-то сообщение об ошибке HTML.

И в журнале событий на контроллере домена ADFS я вижу это:

Microsoft.IdentityServer.RequestFailedException: MSIS7065: Нет зарегистрированных обработчиков протоколов в пути / adfs / oauth2 / token для обработки входящего запроса.

Я попытался немного изменить код, чтобы он больше походил на код, который я использовал для 2.22:

var ac = new AuthenticationContext(authority, false);
var token = await ac.AcquireTokenAsync(resourceURI,clientId,new Uri(clientReturnUri),new PlatformParameters(PromptBehavior.Never));

Это дало мне исключение

Не удалось завершить диалог проверки подлинности на основе браузера. Причина: сервер или прокси не найден.

Но с помощью этого кода я вижу в журнале событий, что токен был успешно создан:

Токен типа 'http://schemas.microsoft.com/ws/2006/05/identitymodel/tokens/Kerberos' для проверяющей стороны' http://XXXXX.XXXXX.com/adfs/services/trust' успешно аутентифицирован. См. Аудит 501 с тем же идентификатором экземпляра для идентификации вызывающего абонента.

и

Маркер доступа OAuth был успешно выдан клиенту «XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX» для проверяющей стороны http://XXXXXX/'. См. Аудит 500 с тем же идентификатором экземпляра для выданных утверждений. См. Аудит 501 с тем же идентификатором экземпляра для идентификации вызывающего абонента.

Что изменилось в способе, которым ADAL выполняет аутентификацию с Kerberos? Как я могу заставить ADAL 5.0.5 делать то, что 2.22 делал успешно?

...