Токен passport-azure-ad veriy msal.js со стратегией Bearer
Я пытаюсь интегрировать библиотеку msal.js ( https://github.com/AzureAD/microsoft-authentication-library-for-js) с объявлением passport-azure ( https://github.com/AzureAD/passport-azure-ad) Стратегия на предъявителя.
Мои конфигурации следующие: 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);
Затем я делаю запрос на конечную точку, защищенную стратегией Bearer Passport-Azure-Ad, и получаю
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) и преуспел, но не могу использовать токен, который дает мне возможность вызывать graph api от имени пользователя ( https://docs.microsoft.com/en-us/graph/auth-v2-user).
Я также попытался использовать токен идентификатора клиента, который я получаю из localStorage
const idToken = localStorage.getItem(Constants.idTokenKey);
Он работает некоторое время, но этот idToken не обновляется, когда я вызываю getTokenSilent, поэтому он перестает работать через некоторое время.
Я очень смущен тем, что мне делать сейчас, поэтому любая помощь будет принята с благодарностью!
4 ответа
У меня тоже была аналогичная проблема, и я заработал.
В моем случае я использую web(msal) и android(ionic - msadal) для генерации токена и его проверки с помощью узла (паспорта). Основная проблема заключается в том, что паспорт ожидает токен доступа v2, в то время как вы получаете v1, используя свой msal/msadal.
Вы можете исправить это, передав:
https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration
в полномочиях uri (msal / msadal) и identityMetadata (паспорт)
и, установив:
"accessTokenAcceptedVersion": 2
вместо null в лазурном портале> регистрации приложений> ваше приложение> manifest.
По умолчанию вновь созданная регистрация приложения Azure AD содержит разрешения API для Microsoft Graph API в форме разрешения типа User.Read . Если вы не собираетесь вызывать Microsoft Graph API, это разрешение необходимо удалить, иначе выданный токен доступа будет токеном версии 1.0, а не токеном версии 2.0, который ожидает паспорт-лазурь-объявление.
Вам также нужно будет выполнить шаги, описанные выше Гауравом Гуптой /questions/27126915/token-passport-azure-ad-veriy-msaljs-so-strategiej-bearer/55078727#55078727
Кто-нибудь исправил это в итоге?
У меня была точно такая же ошибка. Для меня это была проблема конфигурации, в частности, на стороне клиента MSAL и в областях. Я пытался связаться с настраиваемым WebAPI и передавал неправильные области. Это решило мою проблему:
Ошибка `` недопустимая подпись '' для токена доступа (Azure Active Directory / msal js)
Надеюсь, это кому-то поможет.
Благодарность
Согласно приведенному фрагменту кода, вы используете эмитента как v2.0
config.issuer: ' https://login.microsoftonline.com//v2.0'
Но в токене jwt вы получаете iss: ' https://sts.windows.net//'. Config и jwt token Эмитенты не совпадают. Так что токен JWT не будет проверять.
И также config.Audience значение является клиентом, но в токене вы получаете aud: ' https://graph.microsoft.com/'.
Таким образом, вы можете изменить эти две вещи как источник https://sts.windows.net// и аудиторию как https://graph.microsoft.com/ в конфигурации и проверить, получаете ли вы ответ или нет.