passport-azure-ad, он анализирует и проверяет токен?
Мое приложение стека MEAN использует Azure AD для проверки подлинности. Я использую модуль "passport-azure-ad" для аутентификации веб-API. Основываясь на постах и ответах, я понял, что
Если пользователь уже аутентифицирован клиентом (UI), то для каждого вызова API клиент также отправляет токен на сервер. И затем на сервере мы можем использовать стратегию переноса, чтобы "авторизовать" доступ пользователя к API.
Теперь в моем сценарии я просто хотел убедиться, что пользователь аутентифицирован, и, если он есть, разрешить ему доступ к API.
Вопрос
1. Когда сервер выполнит метод "passport.authenticate ('oauth-bearer')", будет ли passport-azure-ad автоматически анализировать и проверять токен, полученный от клиента, или мне нужны какие-либо дополнительные шаги?
2. Что происходит, когда токен не может проверить токен, или если токен поврежден или подделан?
Вот мой полный код
AzureAuthenticationService.js
"use strict";
var passport = require('passport');
var OIDCBearerStrategy = require('passport-azure-ad').BearerStrategy;
var options = {
identityMetadata: 'https://login.microsoftonline.com/tenantid/.well-known/openid-configuration',
validateIssuer: true,
passReqToCallback: false,
loggingLevel: 'error'
};
function configure(app) {
app.use(passport.initialize());
app.use(passport.session());
passport.use(new OIDCBearerStrategy(options,
function(token, done) {
//is there anything else i need to do here?
return done(null, token.unique_name, token);
}));
passport.serializeUser(function (user, done) {
done(null, user);
});
passport.deserializeUser(function (id, done) {
done(null, id);
});
}
function authenticate(req, res, next) {
//is there anything else i need to do here?
passport.authenticate('oauth-bearer')(req, res, next);
}
server.js
"UserService" ниже используется для получения пользователей из базы данных, и я хочу защитить этот вызов API
"use strict";
var authentication = require('./AzureAuthenticationService');
var userService = require('./UserService');
// Initialize server
var express = require('express');
var app = exports.app = express();
authentication.configure(app);
// Set routes
app.get('/api/users',authentication.authenticate,userService.getUsers);
1 ответ
Я сопровождаю passport-azure-ad
, Чтобы ответить на ваш вопрос, да, он подтвердит токен для вас. Это делается с помощью вызова jwtVerify в коде. Вы можете увидеть, где это начинается здесь. Он расшифрует токен с помощью ключей, которые находятся в конечной точке метаданных, которая находится в вашей конфигурации.
Если проверка не удалась, вы получите сообщение об ошибке из кода, как вы увидите выше и на которое ссылаетесь здесь:
jwt.verify(token, PEMkey, options, function(err, token) {
if (err) {
if (err instanceof jwt.TokenExpiredError) {
log.warn("Access token expired");
done(null, false, 'The access token expired');
} else if (err instanceof jwt.JsonWebTokenError) {
log.warn("An error was received validating the token", err.message);
done(null, false, util.format('Invalid token (%s)', err.message));
} else {
done(err, false);
}
Дайте мне знать, если это поможет, и если это так, отметьте ответ. Спасибо!