У меня есть серверный API-интерфейс AspNetCore (в F # с Giraffe), который использует аутентификацию AzureAD с Microsoft.AspNetCore.Authentication.AzureAD.UI, с сохранением состояния сеанса и файлами cookie только https.
Интерфейс - это Elmi sh SPA, скомпилированный в js с Fable.
Если я просто наберу в строке URL защищенную конечную точку моего бэкэнда, все будет работать правильно, если нет уже выполнив вход, я перенаправлен на конечную точку login.microsoft с clientID и т. д., где при успешном входе исходный запрос завершается, и я получаю ответ от своей защищенной конечной точки.
Но если я попытаюсь для доступа к той же конечной точке из кода SPA, например: с помощью fetch или с помощью Fable.Remoting, если вход в систему не выполнен, сервер по-прежнему перенаправляет, но перенаправленный запрос к login.microsoft больше не работает. В Fable.Remoting есть заголовок CORS, от которого отказывается конечная точка входа. Если я отправляю fetch с nocors, от конечной точки входа в систему появляется ответ 200 OK, НО тела ответа (например, нет html код для страницы входа в систему), и, похоже, ничего не происходит.
Я просто понятия не имею, как это должно быть обработано на стороне SPA, и не может ничего найти об этом. Почему бэкэнд включает заголовок CORS в редирект, если он инициирован из Fable.Remoting, и если он инициирован из панели URL браузера? Что не так с извлеченным ответом, что нет тела ответа? Я могу написать только js код в моем клиенте, но даже не мог понять, как это будет обрабатываться в чистом js SPA.
Также в процессе пробовал все это сделать, чтобы удалить веб-пакет devServer. прокси из уравнения, но все остается тем же.