Как я могу отправить веб-запрос в домен b2clogin из моего личного домена? - PullRequest
1 голос
/ 30 мая 2020

Я пытаюсь сделать веб-запрос к службе приложений 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);
      },
    });

Некоторые рекомендации по этому поводу были бы весьма полезны.

1 Ответ

0 голосов
/ 02 июня 2020

Решение моего сценария заключалось в использовании единого входа с MSAL. js с использованием неоправданного потока (о котором позаботился MSAL).

В частности, SSO без MSAL. js вход , при этом мне не нужно снова входить в систему, чтобы получить доступ к Azure функции , поскольку пользователь мог бы уже вошли в систему через Портал и имеют активный сеанс Azure AD B2 C.

Вместо этого я вызываю метод acquireTokenSilent, передавая необходимые параметры для получения токен доступа на предъявителя, который можно использовать для доступа к моей защищенной Azure функции .

Можно найти рабочий пример этого сценария (SPA вызывает Azure службу приложений) здесь в репозитории Microsofts на GitHub. Моя настройка была завершена, поскольку мне оставалось только настроить образец с указанием c подробностей моего клиента / приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...