Доступ к веб-API из JavaScript после аутентификации в Azure AD B2C

Я разрабатываю веб-приложение .Net, где после аутентификации в Azure AD B2C через протокол Azure AD Connect контроллер в моем приложении получает токен доступа через библиотеку MSAL (код C #) для доступа к поддерживаемому веб-API. Все работает нормально. Теперь из того же веб-приложения мне нужно использовать JavaScript для доступа к тому же веб-API с поддержкой. У меня вопрос, как я могу использовать токен доступа, полученный через мой серверный код C #, чтобы заставить мой клиентский JavaScript получить доступ к веб-API без запроса на вход.

Я использовал образец кода на GitHub, чтобы начать. Ниже мой код JavaScript. Когда я запускаю его, я получаю следующую ошибку "user_login_error:User требуется вход в систему "

if (!clientApplication) {
    clientApplication = new Msal.UserAgentApplication(window.config.clientID, window.config.authority, authCallback);
    clientApplication.redirectUri = window.config.redirectUri;
}

function ReloadInfo(type, language, location) {
    clientApplication.acquireTokenSilent(window.config.b2cScopes).then(function (accessToken) {
        ReadResource(accessToken, type, language, location);
    }, function (error) {
        clientApplication.acquireTokenPopup(window.config.b2cScopes).then(function (accessToken) {
            ReadResource(accessToken, type, language, location);
        }, function (error) {
            debugger
            logMessage("Error acquiring the access token to call the Web api:\n" + error);
        });
    })
}

Спасибо!


person Bahram    schedule 20.09.2017    source источник
comment
Пожалуйста, отформатируйте ваш правильно   -  person Sangam Belose    schedule 20.09.2017


Ответы (1)


Простым решением для этого сценария является создание соответствующего контроллера для вызова веб-API.

А в JavaScript вы можете напрямую вызывать свое веб-приложение вместо веб-API. Поскольку у вас есть вход, JavaScript может успешно вызвать контроллер. И в этом sencario нет необходимости использовать библиотеку MSAL для JavaScript.

Обновлять

<script src="https://code.jquery.com/jquery-3.2.1.js"
              integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE="
              crossorigin="anonymous"></script>
<script>
    $(document).ready(function () {
        $("#Location").change(function () {
            $.ajax({
                url: "data.html",//modify the path HTTP request you wanted
            }).done(function (data) {
                console.log(data);// handle the result data here
            });
        });
    })


</script>

Полный документ jQuery можно найти здесь.

person Fei Xue - MSFT    schedule 20.09.2017
comment
Да, в моем веб-приложении уже есть контроллер, который вызывает веб-API. Но как мне вызвать этот код контроллера, который работает на веб-сервере, из моего JavaScript, запущенного в браузере. Спасибо, Фэй. - person Bahram; 20.09.2017
comment
Это нормально, если вы вызываете любой другой веб-API. Вы можете вызвать это действие управления через JQuery, указав URL-адрес для определенного действия. - person Fei Xue - MSFT; 21.09.2017
comment
Хммм, теперь я запутался. Я думал, вы сказали, что я могу вызывать функцию контроллера своего веб-приложения непосредственно из моего JavaScript, а теперь кажется, что вы говорите, что мне нужно вызвать свой веб-API с помощью jQuery? Если я это сделаю, то разве мне не нужно сначала получить токен доступа для веб-API? Каким образом контекст моего сеанса в Azure AD будет сохранен в моем коде JavaScript и C #? - person Bahram; 21.09.2017
comment
Библиотека Jquery не нужна, но ее легко назвать контроллером веб-приложения, или вы будете использовать необработанный JavaScript для обработки HTTP-запроса и ответа, который является сложным. Когда клиентская сторона вызывает контроллер веб-приложения, он использует файл cookie, чтобы вы могли успешно вызвать контроллер веб-приложения после входа пользователя в систему. А затем контроллер веб-приложения может использовать полученный токен доступа перед вызовом API, который вы хотите использовать на C #. Пожалуйста, дайте мне знать, если проблема не исчезнет. - person Fei Xue - MSFT; 22.09.2017
comment
Спасибо, Фей, за помощь. Теперь мне нужно найти образец кода, чтобы увидеть, как вызвать функцию контроллера из JavaScript. Я дам вам знать, если у меня это заработает. - person Bahram; 24.09.2017
comment
Фей, вот мой код контроллера веб-приложений, который выполняет вызов веб-API для получения некоторых ресурсов: - person Bahram; 25.09.2017
comment
@Rostam Мы можем добавить событие change для select элемента управления, который мы хотим отслеживать. И я обновил сообщение, добавив образец кода с помощью jQuery. - person Fei Xue - MSFT; 26.09.2017