Учетные данные приложения и функции Azure Wep не работают - PullRequest
1 голос
/ 31 марта 2019

В настоящее время у меня есть приложение Wep (ASP.NET Core 2.2), и функция Azure возвращает JSON "привет".NodeJS не используется.

Я настроил свое веб-приложение и функцию с B2C, и при индивидуальном доступе к ним они запрашивают вход в систему и работают нормально.

Обновление: Если я получаю доступ к веб-приложению, захожу в систему и затем получаю доступ к URL-адресу функции, он дает ответ «привет», но запрос Ajax не будет работать, если я не получу ручной доступ к URL-адресу функции вручную после входа в систему через веб-приложение.

Моя проблема в том, что у меня есть запрос Ajax от веб-приложения к функции, но он не передает учетные данные и работает только тогда, когда я вхожу в веб-приложение и работаю по отдельности.

Я бы хотел, чтобы веб-приложение передавало свои учетные данные функции, поэтому я не получаю следующую ошибку:

Доступ к XMLHttpRequest по адресу https://xxx.b2clogin.com/xxx.onmicrosoft.com/oauth2/v2.0/authorize?response_type=id_token&redirect_uri=https%3A%2F%2Fxxx.azurewebsites.net%2F.auth%2Flogin%2Faad%2Fcallback&client_id=5e55f7e5-2b51-4a5f-86c0-b7776b2623b2&scope=openid+profile+email&response_mode=form_post&p=b2c_1_signin&nonce=d138edf541d1423e92b99fe7ca400263_20190331110324&state=redir%3D%252Fapi%252FTest%253F_%253D1554029904731' (перенаправлено из 'https://xxx.azurewebsites.net/api/Test?_=1554029904731') из источника' null 'было заблокировано политикой CORS: в запрошенном ресурсе отсутствует заголовок' Access-Control-Allow-Origin '.

 function Test2() {
        console.log("2. Sending request...");
        $.ajax({
            type: "GET",
            cache: false,
            credentials: 'include',
            mode: 'cors',
            url: 'https://xxx.azurewebsites.net/api/Test',
            // contentType: "application/json; charset=utf-8",
            //dataType: "application/json",
            //data: dataValue,
           xhrFields: {
                withCredentials: true
            },
            crossDomain: true,
            success: function (response) {
                console.log('2. Done');
                console.log('2. ' + response);
            },
            failure: function (response) {
                console.log("2. Request: Failed.");
                alert(response.d);
            }
        });
    }

Настройки API для веб-приложения The API settings for the Web App

Настройки для веб-приложения The settings for the Web App

Настройкидля веб-API The settings for the Web Api

B2C Настройки для веб-API B2C Settings for the Web Api

1 Ответ

2 голосов
/ 01 апреля 2019

Как упоминалось в CSharpRocks, проверка подлинности выполняется браузером путем передачи правильного файла cookie в зависимости от домена.

Но я полагаю, что в вашем случае функция и веб-приложение имеют разные доменные имена, верно?Вот почему вам нужно один раз войти в приложение-функцию, и оно заработает.

Есть несколько способов решить эту проблему

  1. Поместите свое WebApp и Function за шлюз приложений Azure , чтобы вы могли получить к ним доступ через одно доменное имя.Таким образом, браузер будет отправлять cookie в запросах, поступающих в этот пользовательский домен.
  2. У вас будет конечная точка в вашем WebApp, которая будет выступать в качестве прокси для вашего функционального приложения.Таким образом, cookie отправляется в первоначальном запросе в ваше WebApp, которое вы можете переслать в приложение Function.
  3. Я предполагаю, что у вас есть приложение MVC, так что это может быть неприменимо для вашего сценария, но для людей, которыеиспользуют JavaScript SPA вместе с API WebApp и API функций, вместо этого они могут выполнить Поток предоставления кода авторизации , чтобы получить токен доступа, который они передадут (в коде JS, а не автоматически) в своих запросах коба API.
  4. Представьте свой API функции в качестве новой области действия в Azure AD и разрешите вашему WebApp доступ к этому API через делегированные разрешения.
...