我正在开发一个.Net Web App,在通过Azure AD Connect协议对Azure AD B2C进行身份验证后,我的应用程序中的控制器通过MSAL库(C#代码)获取访问令牌以访问支持的Web API。这一切都很好。 现在,从同一个Web应用程序,我需要使用JavaScript来访问相同的支持Web API。我的问题是如何利用通过我的服务器端C#代码获得的访问令牌来使我的客户端JavaScript访问Web 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);
});
})
}
谢谢!
答案 0 :(得分:1)
此方案的一个简单解决方案是您可以创建相应的控制器来调用Web API。
在JavaScript中,您可以直接调用Web应用程序而不是Web API。由于您已登录,因此JavaScript可以成功调用控制器。在这个sencario中,没有必要为JavaScript使用MSAL库。
<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>
您可以参考here关于完整的jQuery文档。