Реализация проверки подлинности Azure Active Directory в клиентском веб-приложении OWIN

Здравствуйте, я прочитал и реализовал эти уроки Витторио Берточчи:

"Безопасный веб-API ASP.NET с компонентами Windows Azure AD и Microsoft OWIN"

"Защита собственного API с помощью Microsoft.Owin.Security.ActiveDirectory"

Однако, в отличие от учебных пособий, мое веб-приложение состоит из следующих OWIN-компонентов: NancyFx и ASP.NET Web API (в соответствии с приведенным здесь шаблоном архитектуры). Я пытаюсь реализовать аутентификацию AAD (как это делает г-н Берточчи в своих уроках) в моем Модуль NancyFx (для аутентификации пользователя, который попадает на маршрут, требующий аутентификации):

Я получаю следующую ошибку

Дополнительная информация: Не удалось загрузить сборку, необходимую для интерактивной аутентификации пользователя. Убедитесь, что существует сборка "Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms, версия =2.0.0.0, культура = нейтральная, PublicKeyToken=31bf3856ad364e35".

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

Какой запрос учетных данных AAD следует использовать вместо этого? Как реализовать аутентификацию AAD в клиенте веб-приложения?

1 ответ

Решение

Мое понимание сценария, который вы пытаетесь реализовать, заключается в том, что у вас есть следующие действующие лица:

Браузер -> Веб-приложение -> Веб-API

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

В таком случае ваше веб-приложение должно будет перенаправить браузер на конечную точку авторизации AAD OAuth 2.0. Там пользователь введет свои учетные данные и будет перенаправлен обратно в веб-приложение с кодом авторизации. Затем вы можете использовать этот код авторизации для получения токена через библиотеку аутентификации Active Directory (ADAL). В частности, вы будете использовать метод AuthenticationContext.AcquireTokenByAuthorizationCode. Следующая запись в блоге Витторио дает более подробную информацию о коде, который вам нужно реализовать в веб-приложении для получения токена. Это не специфическая реализация OWIN, но ее легко перевести в ваше приложение NancyFx.

Использование ADAL AcquireTokenByAuthorizationCode для вызова веб-API из веб-приложения

Вам не нужно менять свой веб-API ASP.NET, который вы реализовали, в соответствии с разделом "Защита автономного API с помощью Microsoft.Owin.Security.ActiveDirectory".

Версия AuthenticationContext.AcquireToken, которая используется в примере клиентского приложения в записи блога Защита защищенного API... предназначена для другого сценария, в котором не задействован браузер. Вместо этого пользователь взаимодействует с настольным приложением, которое затем вызывает веб-API от имени пользователя. В этом случае вызов AcquireToken должен отображать диалоговое окно на основе браузера, чтобы пользователь мог войти в систему и получить соответствующий токен.

Другие вопросы по тегам