7

我正在尝试将 msal.js 库(https://github.com/AzureAD/microsoft-authentication-library-for-js)与 passport-azure-ad (https://github.com/AzureAD/passport-azure-广告)承载策略。

我的配置如下: Msal.js

{
    authority: 'https://login.microsoftonline.com/<tennant>',
    clientID: '<clientId>',
    graphScopes: ['user.read', 'Group.Read.All'],
};

护照天蓝色广告

const config = {
    identityMetadata: 'https://login.microsoftonline.com/<tennant>/v2.0/.well-known/openid-configuration',

    clientID: '<clientId>',

    validateIssuer: false,

    passReqToCallback: false,

    issuer: 'https://login.microsoftonline.com/<tennant>/v2.0',

    audience: '<clientId>',

    allowMultiAudiencesInToken: false,

    loggingLevel:'info',
    loggingNoPII: false,
};

在前端,我通过登录流程和 auire 令牌使用

const token = await this.userAgentApplication.acquireTokenSilent(applicationConfig.graphScopes);

然后我向受 passport-azure-ad Bearer Strategy 保护的端点发出请求并得到

authentication failed due to: In Strategy.prototype.jwtVerify: cannot verify token

我也在图书馆里登录过,上面写着:

Error: invalid signature

我的解码令牌如下所示:

{ header:
   { typ: 'JWT',
     nonce:
      'AQABAAAAAACEfexXxjamQb3OeGQ4GugvOOGFjNwsJMp-y1sPJ254AB4C4gW4sb4kOObzC5BvMpBM-89S8Ri5UvHxPIjpp9ZW408ZgJKLzb2hRWXkib2b7yAA',
     alg: 'RS256',
     x5t: '-sxMJMLCIDWMTPvZyJ6tx-CDxw0',
     kid: '-sxMJMLCIDWMTPvZyJ6tx-CDxw0' },
  payload:
   { aud: 'https://graph.microsoft.com',
     iss:
      'https://sts.windows.net/<tennant>/',
     iat: 1551307920,
     nbf: 1551307920,
     exp: 1551311820,
     acct: 0,
     acr: '1',
     aio:
      'AVQAq/8KAAAANG+ugC3cVRBXWggnndtZk1eOw/7cZL5v0UopZHUGmDTborxAC+z02Y1OKRCrhT7M6YjUnziw5swFdEokTPT7GGWXIcazJpS+O/NQdQU3TqI=',
     amr: [ 'pwd', 'mfa' ],
     app_displayname: '<app_name>',
     appid: '<app_id>',
     appidacr: '0',
     family_name: 'Doe',
     given_name: 'John',
     ipaddr: '127.0.0.1',
     name: 'John, Doe',
     oid: '<user_id>',
     onprem_sid: 'S-1-5-21-3948687051-3486659006-1268634143-1873835',
     platf: '14',
     puid: '10030000AA097172',
     scp: 'Group.Read.All Mail.Send openid profile User.Read email',
     sub: 'Q_fJMajGxqk9S6ggyDN6IGunN_aIhsWhnvLPQIxlT5Q',
     tid: '<tennant>',
     unique_name: 'John Doe',
     upn: 'john.doe@mail.com',
     uti: 'Cwf6-Fmm-EGXjPDh_iEHAA',
     ver: '1.0',
     xms_st: { sub: 'XTqgFukoz-mbW2mjPHiJoWqhRQZ_SKUIdHRaitfM3co' },
     xms_tcdt: 1386664440 },
  signature:
   'pg6MiFrvJ3oimdCrnWKsf_DEth7RULJpmMH0P3Z-DtK4CO2865TxrnCaGwnkpXrcgokxDgmk3d5cOi-Y5tAlxx87Yd_KcBITq_M3lQM8aUeXPire4bqYG8OKgkvpHRVgYumaMgaHlm1w7FZjSq4lnGn919VVucqe4rkyxvQlyxWLxG4lfUC2RD5ighhg0GeEwQkkl2Y5YManCn96b-8vTkXHE__VxHJXwBJpesDK2KtzCmuEcM8yg4zyvxuY_GDs2lGWdza-ELSMTXxce3RfzUaLAnNt3dMYkN-2wmROB5TuRMafY7D8FCEd-RmtxC1_-ASE-AEwafA9JxLl4j0Ikw' }

我尝试与 adal.js(https://github.com/AzureAD/azure-activedirectory-library-for-js)集成并成功,但我不能使用它给我的令牌代表用户调用图形 api (https://docs.microsoft.com/en-us/graph/auth-v2-user)。

我还尝试使用从 localStorage 获得的客户端 ID 令牌

const idToken = localStorage.getItem(Constants.idTokenKey);

它工作了一段时间,但是当我调用 getTokenSilent 时,这个 idToken 没有被刷新,所以它会在一段时间后停止工作。

我很困惑我现在应该做什么,所以任何帮助将不胜感激!

4

4 回答 4

1

我也有类似的问题,我得到了它的工作。

就我而言,我使用 web(msal) 和 android(ionic - msadal) 来生成令牌并使用节点(护照)对其进行验证。主要问题是,当您使用 msal/msadal 获得 v1 时,护照需要 v2 访问令牌。

您可以通过以下方式对其进行纠正:

https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration

权限 uri (msal/msadal) 和identityMetadata (passport)

并且,设置:

"accessTokenAcceptedVersion": 2,而不是null,在 azure 门户 > 应用注册 > 你的应用 > 清单中。

于 2020-04-01T09:15:04.023 回答
1

最后有人解决这个问题吗?

我有完全相同的错误。对我来说,这是一个配置问题,特别是在客户端 MSAL 端和范围。我试图与自定义 WebAPI 进行通信,但我传递了错误的范围。这解决了我的问题:

访问令牌的“无效签名”错误(天蓝色活动目录/msal js)

希望这可以帮助某人。

谢谢

于 2020-05-14T19:25:42.313 回答
0

根据上面的代码片段,您使用 issuer 作为 v2.0

config.issuer: ' https://login.microsoftonline.com/ / v2.0 '

但是在 jwt 令牌中,您会得到 iss:' https://sts.windows.net/ /'。Config 和 jwt 令牌颁发者不匹配。所以 jwt 令牌不会验证。

并且 config.Audience 值也是clientid但在令牌中你得到 aud: ' https://graph.microsoft.com '。

那么你可以在配置中将这两个东西的发行者更改为https://sts.windows.net/ /并将受众值更改为https://graph.microsoft.com并检查你是否得到响应。

于 2019-03-14T13:00:21.043 回答
0

默认情况下,新创建的 Azure AD 应用程序注册包含 Microsoft Graph API 的 API 权限,形式为User.Read权限类型。如果您无意调用 Microsoft 的 Graph API,则需要删除此权限,否则颁发的访问令牌将是 v1.0 令牌,而不是 passport-azure-ad 期望的 v2.0 令牌。

您还需要按照 Gaurav Gupta https://stackoverflow.com/a/60967402/6772215所述的步骤进行操作

于 2022-01-02T07:06:28.267 回答