通过Azure AD B2C进行身份验证后,从JavaScript访问Web API

通过Azure AD B2C进行身份验证后,从JavaScript访问Web API,javascript,c#,asp.net-core-webapi,azure-ad-b2c,msal,Javascript,C#,Asp.net Core Webapi,Azure Ad B2c,Msal,我正在开发一个.Net Web应用程序,在通过Azure AD Connect协议对Azure AD B2C进行身份验证后,我的应用程序中的控制器通过MSAL库(C#代码)获取访问令牌,以访问一个支持的Web API。那很好用。 现在,从同一个web应用程序中,我需要使用JavaScript访问同一个备份的web API。我的问题是,如何利用通过服务器端C#代码获得的访问令牌,让客户端JavaScript访问Web API而不被提示登录 我使用了GitHub上的示例代码开始。 下面是我的Java

我正在开发一个.Net Web应用程序,在通过Azure AD Connect协议对Azure AD B2C进行身份验证后,我的应用程序中的控制器通过MSAL库(C#代码)获取访问令牌,以访问一个支持的Web API。那很好用。 现在,从同一个web应用程序中,我需要使用JavaScript访问同一个备份的web API。我的问题是,如何利用通过服务器端C#代码获得的访问令牌,让客户端JavaScript访问Web API而不被提示登录

我使用了GitHub上的示例代码开始。 下面是我的JavaScript代码。当我运行它时,我得到以下错误
“user\u login\u error:user
需要登录”


谢谢

此场景的一个简单解决方案是,您可以创建相应的控制器来调用web API

在JavaScript中,您可以直接调用web应用程序而不是web API。由于您已经登录,JavaScript可以成功调用控制器。在这个sencario中,不需要为JavaScript使用MSAL库

更新

$(文档).ready(函数(){
$(“#位置”)。更改(函数(){
$.ajax({
url:“data.html”,//修改所需的HTTP请求路径
}).完成(功能(数据){
console.log(data);//在这里处理结果数据
});
});
})

您可以参考完整的jQuery文档。

请正确设置您的格式是的,我的web应用程序中已经有一个调用web API的控制器。但是我如何从浏览器上运行的JavaScript调用web服务器上运行的控制器代码呢。谢谢你,费。这是正常的,因为你调用任何其他网络API。您可以通过Jquery为特定操作提供URL来调用该控制操作。我以为你说我可以直接从JavaScript调用我的Web应用程序控制器函数,现在你好像说我需要使用jQuery调用我的Web API?如果我这样做了,那么我不需要首先获得Web API的访问令牌吗?如何在我的JavaScript和C#代码中保存我与Azure AD的会话上下文?Jquery库不是必需的,但很容易调用web app controller,或者您将使用原始JavaScript处理复杂的HTTP请求和响应。当客户端调用web app controller时,它将使用cookie,以便用户登录后可以成功调用web app controller。然后web应用程序控制器可以在使用C#之前使用访问令牌acquire调用您想要的API。如果你还有问题,请告诉我。谢谢你的帮助。现在我必须找到一些示例代码来了解如何从JavaScript调用控制器函数。我会让你知道,如果我得到它的工作。
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);
        });
    })
}
<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>