AAD и AAD B2 C не поддерживают CORS, как указано в документации MSDN. Это означает, что когда ваше приложение Angular вызывает API-функцию без токена и, таким образом, перенаправляется на конечную точку AAD B2 C для проверки подлинности, возникает нерешаемая проблема. Уловка с так называемым «неявным потоком» состоит в том, чтобы предотвратить это, гарантируя, что вы сначала получили токен при прямом вызове из приложения Angular в конечную точку B2 C. И поскольку регистрация приложения, для которой назначен этот токен, имеет разрешение на доступ к API функции, токен может быть неявно создан и перенаправлен в API функции, который затем принимает его. И тогда не происходит никакого перенаправления, и, следовательно, также не возникает проблем с CORS.
Часто - по крайней мере из моего опыта - проблема с CORS, с которой вы сталкиваетесь, немного вводит в заблуждение, поскольку она скрывает реальную проблему, которая может быть 1) пользователь не является проверен на всех (токен полностью отсутствует) или 2) токен для вызова API не создается неявным образом и не вводится в вызов HTTP. Я предлагаю следующие проверки:
MsalModule
правильно настроен (примечание: MsalModule.forRoot(<config>)
не поддерживает динамические c конфигурации) - маркер пользователя доступен в SessionStorage или LocalStorage без ошибок
- Неявный поток настроен правильно с:
MsalInterceptor
зарегистрирован как поставщик protectedResourceMap
настроен для URL функции
Недавно я создал и задокументировал эталонное решение с функцией Angular & Azure, подключенной к AAD B2 C. Источник и файл readme вы найдете здесь: https://github.com/garaio/DevCamp-AzureServerless/tree/master/Solutions/D04-AAD-B2C-multi-tenancy#client -app-deploy .