Я пытаюсь сделать веб-запрос к службе приложений Azure (Azure Функция ), которая защищена с помощью Azure аутентификации Active Directory (используются данные регистрации приложения B2 C) . Веб-запрос выполняется из веб-приложения ( Портал ) с помощью простых JavaScript вызовов (у меня нет доступа к исходному коду портала.
Веб-приложение ( Портал ) и Azure Служба приложений (Azure Функция ) защищены с помощью Azure B2 C и требуют, чтобы пользователи входили со своими учетными записями Azure AD B2 C. Это работает нормально.
Запросы к функции Azure с портала вызывают следующую ошибку в консоли браузера:
Access to XMLHttpRequest at 'https://XXX.b2clogin.com/XXX.onmicrosoft.com/b2c_1_signupsignin/oauth2/v2.0/authorize?...' (redirected from 'https://YYY.azurewebsites.net/api/MyMethod') from origin 'https://ZZZ.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Тот же веб-запрос, сделанный в новом браузере Вкладка успешно показывает защищенный ресурс (при условии, что в браузере существует активный сеанс B2 C).
Я потратил много времени на чтение Azure B2 C документации , делая несколько запросов на жетоны и c, все безрезультатно.
Я считаю, что суть вопроса sh изложена в этом ответе здесь , но как может это быть спроектировано иначе Как избежать этой ловушки?
В настоящее время домен .b2clogin.com не допускает никаких запросов между источниками из любого другого домена.
Хотя это кажется правдой на основании Здесь обнаруживаются проблемы CORS, как я могу отправить веб-запрос с моего портала домена (XXX.com) на мою Azure функцию (YYY.azurewebsites. net) , которые оба защищены с использованием моей регистрации клиента / приложения B2 C.
РЕДАКТИРОВАТЬ: Я знаю (на основании полученной выше ошибки), что функция Azure является перенаправление на страницу входа B2 C при первоначальном вызове с Portal на Azure Function .
Я включаю свой текущий настройки ниже - ранее я защищал только службы приложений с помощью аутентификации Azure AD и доступа путем получения токенов носителя. Невозможно в этом сценарии, поскольку у меня нет доступа к коду Portal для безопасного хранения личных ключей / секретов - я зависим от опыта SSO - вызовы должны выполняться в JavaScript.
Служба приложений - Аутентификация (Azure Функция)
- Войти с помощью Azure Active Directory
- Идентификатор клиента: Azure AD B2 C идентификатор регистрации приложения
- URL-адрес эмитента: Взято из моего потока пользователей входа / регистрации
Azure AD B2 C Клиент - Регистрация приложения
- Включить веб-приложение / веб-API: Да
- Разрешить неявный поток: Да
Вызов кода на стороне клиента Azure Функция
$.ajax({
type: 'POST',
url: "https://YYY.azurewebsites.net/api/MyMethod",
success: function(response) {
console.log(response);
},
error: function(request, status, error) {
console.log(request.responseText);
},
});
Некоторые рекомендации по этому поводу были бы весьма полезны.