У меня есть клиент 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
делал успешно?