Passport-azure-ad MSAL 使用 BearerStrategy 会出现错误

问题描述 投票:0回答:1

客户端(React Js)-@azure/msal-react,@azure/msal-browser 服务器(Express Js) - Passport-azure-ad

var options = {
    identityMetadata:"https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration",
    clientID:"<client-id>",
    validateIssuer:true,
    issuer: "https://login.microsoftonline.com/<tenant-id>/v2.0",
    passReqToCallback: false,
    allowMultiAudiencesInToken: false,
    audience:"<client-id>",
    loggingLevel: "info",
    loggingNoPII: false,
    scope: ["User.Read"],
  };

  var bearerStrategy = new BearerStrategy(options,
    function(token, done) {
      log.info('verifying the user');
      log.info(token, 'was the token retreived');
      findById(token.oid, function(err, user) {
        if (err) {
          return done(err);
        }
        if (!user) {
          // "Auto-registration"
          log.info('User was added automatically as they were new. Their oid is: ', token.oid);
          users.push(token);
          owner = token.oid;
          return done(null, token);
        }
        owner = token.oid;
        return done(null, user, token);
      });
    }
  );

错误日志

{"name":"AzureAD: 承载策略","hostname":"xxxxx-xxxxx","pid":xxxxx,"level":x,"msg":"身份验证失败,原因是:签名无效","时间":"xxxx","v":0}

尽管服务器从标头中的客户端接收到

accessToken
作为授权承载令牌,但服务器会解析该令牌并解码该令牌以提供用户信息。但生成 pemKey 后,我收到上述错误日志。

此错误日志可能是什么原因?

任何帮助表示赞赏,谢谢

azure-ad-msal bearer-token msal.js msal-react passport-azure-ad
1个回答
0
投票

我创建了一个 Azure AD 应用程序并授予了 API 权限,如下所示:

enter image description here

使用以下参数通过 Postman 生成访问令牌

https://login.microsoftonline.com/TenantID/oauth2/v2.0/token

client_id:ClientID
scope:user.read
grant_type:authorization_code
redirect_uri:https://jwt.ms
code:code
client_secret:ClientSecret

enter image description here

当我解码访问令牌时,我得到了相同的错误,如下所示:

enter image description here

注意:不应验证为 Microsoft Graph API 生成的令牌,因为它不适用于应用程序。正如 Sérgio Correia 所建议的,只有 Microsoft Graph 可以验证为 MS Graph 本身发行的令牌。

只能验证为您的应用程序生成的访问令牌。

因此,要解决该错误,您可以公开 API,如下所示:

enter image description here

添加API权限:

enter image description here

我通过将 scope 传递为

api://ClientID/test.read

来生成访问令牌

enter image description here

现在签名已验证成功,如下所示:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.