如何调试护照

时间:2016-11-17 22:12:17

标签: node.js authentication express passport.js

我不能为我的生活似乎弄清楚如何调试护照策略。我只是在概念上做了一些可怕的错误吗?我现在已经在这里敲了大约10个小时,并且还没有一点距离。

这是我第一次使用护照。在这种特殊情况下,我使用的是passport-jwt。我知道对象键不对,但我只是试图使用console.log()来跟踪服务器的路径,所以我理解了它是如何工作的。我甚至没有到达passport.use( new JwtStrategy(..))

我遗漏了不必要的代码。与我的mongodb的连接很好,我的mongoose架构很好。

我正在使用对server.get('/fakelogin', ...)执行请求承诺POST的测试路由/api/login进行测试。我还尝试使用curl -X POST并修改post路由到url查询参数。我经常得到一个未经授权的#34;没有护照策略代码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;

1 个答案:

答案 0 :(得分:0)

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

完全明白这是超级n00b,但希望它能帮助初学者尝试理解认证。

因此完全错过了您需要在请求中发送JWT的事实。请求中使用的JWT需要使用与passport-jwt策略opts.secretOrKey中定义的相同的秘密。如果他们不匹配,您将获得未经授权,并且永远不会到达passport.use策略块。

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

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

Greate指南,我最终找到了 http://jonathanmh.com/express-passport-json-web-token-jwt-authentication-beginners/