当前位置: 首页 > 知识库问答 >
问题:

passport-azure-ad,它是否解析和验证令牌?

许淳
2023-03-14

我的平均堆栈应用程序使用Azure AD进行身份验证。我正在使用“Passport-Azure-AD”模块进行web api认证。根据这里的回复,我了解到

    "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个答案

宗冷勋
2023-03-14

我是passport-azure-ad的维护者。回答您的问题,是的,它将为您验证令牌。它通过调用代码中的jwtVerify来完成这一操作。你可以看到这是从哪里开始的。它将使用在配置中的元数据endpoint找到的密钥来解密令牌。

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

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);
                }
 类似资料:
  • 问题内容: 我正在努力验证Azure AD令牌签名。 当我在下面的“ jwks_uri”字段中查找正确的键描述时 https://login.microsoftonline.com/common/.well-known/openid- configuration 我检查所属密钥数据。 我尝试使用“ n”-模数和“ e”字段生成用于签名验证的公钥,但最终出现错误: 安慰: 我尝试了另一种使用“ x5

  • 我有一个使用 Msal 库获取的 Azure AD JWT 令牌,但是当我尝试验证此令牌时出现问题: 客户端:共享点 Web 部件 另一方面,我有一个服务器应用程序(Java),其中验证了访问令牌 验证人: 法典 我的问题是,当我尝试验证此令牌时,我收到了此错误:使用算法验证时,令牌的签名无效:SHA256with RSA 我被困在这个,如果令牌是正确的,为什么我有这个错误? 问候

  • 我在使用jwt.io验证我的azure广告访问令牌时获得无效签名(在手动检查后将转移到scala代码)。 我正在使用 curl 生成访问令牌: 虽然它为我提供了访问令牌,但响应不包含“Id_token”。不知道为什么。 我正在使用 BEGIN 和 END 证书包装 https://login.microsoftonline.com/common/discovery/keys 中的公钥。(如 htt

  • 在前端,我通过登录流和auire令牌使用 然后向passport-azure-ad承载策略保护的endpoint发出请求,得到 我也在库里做了日志记录,上面写着: 我很困惑我现在该做什么,所以任何帮助都将非常感谢!

  • 我正在学习Azure AD和Office 365,我想知道以下内容是否可行,如果可行,如何进行,因为我对文档的几个方面感到困惑: 假设一家名为Companyya的公司为其组织的用户提供Office 365。这些用户使用其Office 365 Cred使用Exchange/Outlook和Office登录(Office desktop)。 Companyya在内部托管了Active Director