【问题标题】:Accessing a Web API from JavaScript after being authenticated against Azure AD B2C在针对 Azure AD B2C 进行身份验证后从 JavaScript 访问 Web API
【发布时间】:2017-09-20 05:15:58
【问题描述】:

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

我使用 GitHub 上的示例代码来帮助我入门。 下面是我的 JavaScript 代码。当我运行它时,我收到以下错误"user_login_error:User login is required"

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);
        });
    })
}

谢谢!

【问题讨论】:

  • 请正确格式化

标签: javascript c# asp.net-core-webapi azure-ad-b2c msal


【解决方案1】:

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

在 JavaScript 中,您可以直接调用 Web 应用程序而不是 Web API。由于您已登录,因此 JavaScript 可以成功调用控制器。而且在这个场景中,没有必要为 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 文档。

【讨论】:

  • 是的,我的 Web 应用程序中已经有一个控制器,它调用 Web API。但是我如何从浏览器上运行的 JavaScript 调用在 Web 服务器上运行的控制器代码。谢谢飞。
  • 调用其他Web API是正常的。您可以通过 Jquery 通过提供特定操作的 URL 来调用该控制操作。
  • 嗯,我现在很困惑。我以为你说我可以直接从我的 JavaScript 调用我的 Web App 控制器函数,现在你似乎在说我需要使用 jQuery 调用我的 Web API?如果我这样做,那么我是否不必先获取 Web API 的访问令牌?如何在我的 JavaScript 和 C# 代码中保留我与 Azure AD 的会话上下文?
  • Jquery 库不是必需的,但很容易调用您的 Web 应用程序控制器,否则您将使用原始 JavaScript 来处理复杂的 HTTP 请求和响应。客户端调用 Web 应用控制器时,它使用 cookie,因此您可以在用户登录后成功调用 Web 应用控制器。然后 Web 应用程序控制器可以使用之前获取的访问令牌来调用您想要使用 C# 的 API。如果仍有问题,请告诉我。
  • 感谢小飞的帮助。现在我必须找到一些示例代码来了解如何从 JavaScript 调用 Controller 函数。如果我让它工作,我会告诉你的。
猜你喜欢
  • 2021-03-14
  • 2020-01-14
  • 2019-05-02
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 2019-06-03
相关资源
最近更新 更多