0

Я пытаюсь выполнить образец WebApp-WebApi-OIDC, но он застревает в бесконечном цикле во время аутентификации при вызове WebApi. После кода в MVC TodoListController приводит к этому странному поведению:Бесконечный цикл при вызове WebApi из WebApp с использованием аутентификации OpenIDConnect AAD

if (Request.QueryString["reauth"] == "True") { 
    HttpContext.GetOwinContext().Authentication.Challenge(
     new AuthenticationProperties(), 
     OpenIdConnectAuthenticationDefaults.AuthenticationType); 
} 

Я также попытался следующим SystemWebCookieManager обходного пути, но это не помогло.

Есть ли известная ошибка или я не реализую ее правильно?

Спасибо!

ответ

0

Образец кода хорошо подходит для меня. Код, упомянутый выше, выполняется, когда код поймал AdalException.

Какая строка кода вызывает эту проблему? Вы также получили сообщение TokenCache в этом примере кода, который вы указали в этом post?

Убедитесь, что вы успешно приобрели токен в TodoListController.

+0

Приложение отлично работает во всех областях, как О, Home, профиль, Контакт, Войти и Выйти. За исключением списка дел. Когда я нажимаю эту ссылку из пользовательского интерфейса, она отображает ** Вход, необходимый для просмотра списка дел **, и ссылку для входа. Когда я нажимаю эту ссылку, она застревает в бесконечном цикле и никогда не возвращается. Поэтому я не думаю, что это та же проблема, что и у меня, потому что профиль и другие области работают нормально. – Sam

+0

Забыл отметить, что я использую предложенную версию пакета ADAL nuget. Поэтому я не думаю, что это одна и та же проблема, потому что она работает в других областях, которые используют SessionCache и успешно приобретают и сохраняют токен. – Sam

+0

После дополнительной отладки я обнаружил, что 'result = await authContext.AcquireTokenSilentAsync (todoListResourceId, учетные данные, новый UserIdentifier (userObjectID, UserIdentifierType.UniqueId));' всегда терпит неудачу и выдает исключение. Блок catch отправляет его для входа в систему, а промежуточное ПО OIDC снова возвращается к тому же контроллеру. И это продолжается и продолжается.Внутренним исключением базового AdalException является _AADSTS65001: пользователь или администратор не согласился использовать приложение с идентификатором xx-xx. Отправьте запрос интерактивного авторизации для этого пользователя и ресурса. – Sam

0

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

  • Я использовала system.web печенье вместо того, чтобы полагаться на реализацию печенья по умолчанию Owin. Подробности: here.
  • Убедитесь, что вы не ссылаетесь на ошибочный пакет ADAL.net nuget. Вместо этого обратитесь к версии, упомянутой в этом post.
  • Настройка правильных разрешений для приложения AAD, связанного с вашим веб-приложением. Это два, которые я сконфигурировал:
    • Доступ к TodoListService в качестве делегированного разрешения.
    • Чтение данных каталога для Windows Azure Active Directory в качестве разрешения на использование.
  • Убедитесь, что AppId в файле конфигурации веб-сайта для todo:TodoListResourceid ключ appsettings совпадает с тем, что вы настроили в приложении AAD, связанном с сервисом todoList webapi. А также должно быть таким же, как указано в проекте VS WebApis ida:Audience appSetting. формат, который я использовал
https://{tenant}/{appName}