我正在尝试将msal.js库(https://github.com/AzureAD/microsoft-authentication-library-for-js)与Passport-azure-ad(https://github.com/AzureAD/passport-azure-ad)承载策略集成。
我的配置如下: Msal.js
{
authority: 'https://login.microsoftonline.com/<tennant>',
clientID: '<clientId>',
graphScopes: ['user.read', 'Group.Read.All'],
};
passport-azure-ad
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);
然后我向受“护照-天蓝色-广告”承载策略保护的端点提出请求,并获得
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)集成并成功,但是我无法使用令牌,它使我无法代表用户(https://docs.microsoft.com/en-us/graph/auth-v2-user)调用图api。
我还尝试使用从本地存储获取的客户端ID令牌
const idToken = localStorage.getItem(Constants.idTokenKey);
它可以工作一段时间,但是当我调用getTokenSilent时并没有引用此idToken,因此一段时间后它将停止工作。
我很困惑,现在该怎么办,所以将不胜感激!
答案 0 :(得分:1)
有人最终解决了这个问题吗?
我有完全相同的错误。对我来说,这是一个配置问题,特别是在客户端MSAL端和作用域。我试图与自定义WebAPI通信,并且传递了错误的范围。这解决了我的问题:
'Invalid Signature' error for Access Token (azure active directory / msal js)
希望这对某人有帮助。
谢谢
答案 1 :(得分: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 并检查是否收到响应是否。
答案 2 :(得分:0)
我也遇到了类似的问题,并且我能解决这个问题。
在我的情况下,我同时使用web(msal)和android(ionic-msadal)生成令牌并使用node(passport)对其进行验证。 主要问题是,护照在使用msal / msadal获得v1时会期望v2访问令牌。
您可以通过以下方式对其进行纠正:
https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration
在
并设置:
"accessTokenAcceptedVersion": 2
,而不是 null ,
在Azure门户>应用程序注册>您的应用程序>清单中。