访问令牌不包括通过MSAL对API的访问

时间:2018-11-07 23:46:45

标签: azure-active-directory msal msal.js

我在React应用中使用MSAL for JavaScript对Azure AD进行身份验证。我能够成功验证用户身份并获得ID令牌和访问令牌。但是,检索到的访问令牌无法访问使用Azure AD保护的API。

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

dotnet核心应用程序与react应用程序之间的区别是“资源”属性。我不确定如何在MSAL的请求中添加它。

我的React代码:

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发送此资源参数。不确定如何发送,如果那是问题所在。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

MSAL使用范围的概念,而不是资源。 我对您的问题的印象是,这是一个v1 Web API(已在Azure portal的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