Node.js passport azure广告,是否解析&;验证令牌?

Node.js passport azure广告,是否解析&;验证令牌?,node.js,passport.js,adal,azure-active-directory,Node.js,Passport.js,Adal,Azure Active Directory,我的平均堆栈应用程序正在使用Azure AD进行身份验证。我正在使用“passport azure ad”模块进行web api身份验证。基于我的理解 如果用户已经通过客户端(UI)身份验证,则对于每个API调用, 客户端还将向服务器发送令牌。然后在 服务器我们可以使用承载策略“授权”用户访问API 现在,在我的场景中,我只想确保用户已通过身份验证,如果用户已通过身份验证,则允许他访问API 问题 1.当服务器执行方法“passport.authenticate('oauth-bearer')”

我的平均堆栈应用程序正在使用Azure AD进行身份验证。我正在使用“passport azure ad”模块进行web 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);

我是passport azure ad的维护者。要回答您的问题,是的,它将为您验证令牌。它使用代码中对jwtVerify的调用来实现这一点。它将使用在配置中的元数据端点处找到的密钥解密令牌

如果验证不成功,您将从代码中得到一个错误,您将在上面看到并在此处引用:

jwt.verify(令牌、PEMkey、选项、函数(err、令牌){
如果(错误){
if(jwt.TokenExpiredError的错误实例){
log.warn(“访问令牌已过期”);
完成(null,false,“访问令牌已过期”);
}else if(err instanceof jwt.JsonWebTokenError){
log.warn(“验证令牌时收到错误”,err.message);
完成(null,false,util.format('Invalid token(%s'),err.message));
}否则{
完成(错误,错误);
}