首页 > 解决方案 > 访问令牌不包括使用 MSAL 访问 API

问题描述

我在反应应用程序中使用MSAL for JavaScript对 Azure AD 进行身份验证。我能够成功验证用户并获取 id 令牌和访问令牌。但检索到的访问令牌无法访问受 Azure AD 保护的 API。

一切都在 Azure AD 端进行配置,因为我可以使用检索到的访问令牌通过 dotnet 核心 Web 应用程序与 API 对话。

dotnet core app 和 react app 的区别在于“resource”属性。我不确定如何将其包含在 MSAL 的请求中。

我的反应代码:

userAgentApplication = new UserAgentApplication(
    "<clientid>",
    "<azureAdUrl>",
    this.authCallback,
    { redirectUri: "http://localhost:3000/", cacheLocation: "localStorage" }
  );

  authCallback(errorDesc, token, error, tokenType) {
    if (token) console.log(token);
  }


login() {
    this.userAgentApplication.loginRedirect().then(function(idToken) {

      this.userAgentApplication.acquireTokenSilent().then(
        function(accessToken) {
          console.log('Access Token: ' + accessToken);
        }
      );
    });
  }

对于 dotnet 核心应用程序,我使用与 Azure AD 应用程序中配置的两个 URL 相同的配置,并添加一个。

.AddOpenIdConnect(o =>
                {
                    ....
                    o.Resource = "GUID of the API";
                });

我没有使用 MSAL 发送此资源参数。不确定如何发送以及是否是问题所在。

任何帮助表示赞赏。

标签: azure-active-directorymsalmsal.js

解决方案


MSAL 使用范围的概念,而不是资源。我对您的问题的印象是,这是一个 v1 Web API(在Azure 门户中的 App 注册刀片中注册?如果是这种情况,您的资源范围可能是 o.Resource+"/user_impersonation"

如果它是 v2.0 API(在apps.dev.microsoft.com注册)或 Azure 门户但使用新应用程序注册(预览版),则在注册时提供范围

对于 ASP.NET Core 应用程序,您可能希望查看以下示例:https ://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2 ,可能还有这个分支aspnetcore2-2 -signInAndCallGraph


推荐阅读