У нас есть приложение Angular5 с внутренним API DotNet OData.Приложение размещено в веб-приложении с виртуальным каталогом для приложения Angular5 и другим виртуальным каталогом для бэкэнда DotNet.Веб-приложение защищено Azure AD, а для веб-сайта определено приложение Azure AD.
Все это прекрасно работает.У нас нет кода проверки подлинности во внешнем интерфейсе (за исключением «withCredentials: true», установленного в вызовах службы), но очевидно, что все приложение, защищенное Azure AD, позволяет внешнему интерфейсу вызывать внутренний интерфейс без проблем (Azure заставляет вас выполнять аутентификацию, когдавы получаете доступ к интерфейсу Angular5).
Проблема возникает, когда мы пытаемся разработать интерфейс.При разработке Angular5 нужно запускать код Angular5 локально, поэтому я настроил веб-приложение, в котором размещается только код бэкэнда, и указал там локальную конфигурацию приложения Angular5.Это не удается при первом вызове бэкэнда с 401. Один из наших разработчиков обнаружил, что если вы просто подключите URL-адрес к бэкенду с помощью того же браузера (т.е. скопируйте сбойный вызов со вкладки разработчика сети браузера на новую вкладку браузера втот же браузер) вы пройдете процесс аутентификации, а затем, когда вы снова запустите локальное приложение Angular5, оно заработает.Мы думали, что нашли обходной путь, пока не заметили, что по какой-то причине это, кажется, только исправляет вызовы «только для чтения».GET работает, OPTIONS работает, но POST не работает с 401. Я поместил некоторый отладочный код в бэкэнд, но, похоже, этот код даже не вызывается (т. Е. Azure, а не наш бэкэнд, блокирует вызов).
Поэтому я попытался выяснить, как заставить локальный экземпляр Angular5 вести себя как тот, который размещен в веб-приложении, но я не могу понять, что мне нужно делать.Я также не смог найти кого-то, кто делал бы это, поэтому я не могу найти решение.
Я пробовал различные способы активного получения токена (например, настройка /.auth/me, использование adal5 для "вход в систему "и т. д.) для внешнего интерфейса, но кажется, что каждое возможное решение в конце концов побеждено CORS.Наш бэкэнд имеет Allow-Origin для localhost: 4200, но это не относится к login.windows.com для этапа аутентификации.Я попытался поместить localhost: 4200 в настройку CORS в веб-приложении Azure, но затем он жалуется на отсутствие заголовка Allow-Authentication, и я не могу заставить Azure предоставить это.Я прочитал в Интернете, что это происходит потому, что Azure не ожидал, что люди будут использовать «проверку подлинности с помощью cookie», поэтому после некоторых исследований я обнаружил, что «проверка подлинности с помощью cookie» использовалась из-за вызовов «withCredentials: true», поэтому я изменил всете, чтобы ложь.Затем ошибка Allow-Authentication исчезает, но я просто сталкиваюсь с большим количеством сбоев CORS во время авторизации (login.windows.com).
Так что я действительно застрял здесь.Я не могу поверить, что я единственный человек в мире, который пытается запустить локальный экземпляр Angular5 на основе защищенного веб-приложения Azure AD Azure AD, но я нигде не могу найти примеров людей, успешно делающих это.Я также хотел бы избежать необходимости выполнять некоторую сложную локальную аутентификацию, потому что код работает идеально как есть, когда размещается в том же веб-приложении Azure, что и серверная часть.У кого-нибудь есть настройка, как я описываю, которая работает?