node.js - 如何调试 Passport

标签 node.js authentication express passport.js

我似乎一辈子都想不出如何调试通行证策略。我只是在概念上做了一些非常错误的事情吗?我已经为此苦苦思索了大约 10 个小时,但一点进展都没有。

这是我第一次使用 Passport 。在这种特殊情况下,我使用的是 passport-jwt。我知道对象键不正确,但我只是尝试使用 console.log() 跟踪通过服务器的路径,以便我了解其工作原理。我什至没有到达 passport.use( new JwtStrategy(..))

我省略了不必要的代码。与我的 mongodb 的连接很好,我的 mongoose 模式也很好。

我正在使用测试路由 server.get('/fakelogin', ...) 进行测试,该路由向 /api/login 执行请求 promise POST .我也试过使用 curl -X POST 并修改 post 路由到 url 查询参数。我只是经常收到“未经授权”错误,而 Passport 策略代码 console.log 从未触发。

服务器

var server = express();
server.use(passport.initialize());

let opts = {
    jwtFromRequest: ExtractJwt.fromBodyField('token'),
    secretOrKey: config.apiKey,
    algorithms: [ 'HS256', 'HS384' ],
    ignoreExpiration: true
};

passport.use(new JwtStrategy(opts, function( jwt_payload, done ) {
    // mongoose users query against JWT content

    return done(null, true); // EDIT: test to finish flow
}));

server.use('/api', routes);
server.listen(8000);

路线

let routes = express.Router();

routes.post('/securedroute', passport.authenticate('jwt', { session: false }),
    ( req, res ) => {
        res.send('success');
    }
);

routes.get('/testsecure', ( req, res ) => { // EDIT: mock request with JWT
    let options = {
        method: 'POST',
        uri: 'http://localhost:8000/api/authentication/securedroute',
        body: {
            token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiZW1haWwiOiJhQGEuY29tIiwiYWRtaW4iOnRydWV9.afjyUmC81heavGBk7l9g7gAF5E6_eZeYSeE7FNmksp8'
        },
        json: true
    };

    rp(options)
    .then( ( info ) => res.json({ info }) )
    .catch( ( err ) => res.json({ err }) );
});

export default routes;

最佳答案

对上面的代码进行了一些编辑以完成流程。

完全理解这是 super n00b,但希望它能帮助初学者尝试理解 auth。

所以完全错过了您需要在请求中发送 JWT 的事实。请求中使用的 JWT 需要使用与您在 passport-jwt 策略 opts.secretOrKey 中定义的相同的 secret 。如果它们不匹配,您将获得未经授权且永远无法到达 passport.use 策略 block 。

生成一个 HMAC http://www.freeformatter.com/hmac-generator.html

创建了一个测试 JWT https://jwt.io/#debugger

很棒的向导,我终于找到了 http://jonathanmh.com/express-passport-json-web-token-jwt-authentication-beginners/

关于node.js - 如何调试 Passport ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40665986/

相关文章:

javascript - 当我的代码运行时出现 'Rich Embed fields may not be empty' 错误

Mysql 的 Express 查询返回 null

node.js - 类型 'body' 上不存在属性 'Request'

mongodb - 如何正确初始化 Mongoose 集合中的文档

javascript - 如何使用 nodejs 遍历 JSON 中的嵌套对象?

javascript - Node.js 和 zeroMQ 请求和响应

c# - 自定义 OWIN CookieAuthenticationProvider 在第一次/冷启动时失败

java - 如何在 GAE 端点中检索自定义用户对象?

asp.net - 配置IIS客户端证书映射认证

html - 相对于url快速加载图片