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);
                }

Дайте мне знать, если это поможет, и если это так, отметьте ответ. Спасибо!

Другие вопросы по тегам