节点JS API身份验证

时间:2018-07-27 10:13:34

标签: node.js authentication

我是NodeJS的新手,正在使用它开发API, 我希望使用API​​令牌方法对API进行身份验证(只有通过特定加密创建的具有存储在数据库中的令牌的人才能访问API资源。)

我正在使用SQL Server,NodeJS和Express框架。

请指导我如何使用身份验证API请求。

谢谢。

3 个答案:

答案 0 :(得分:2)

您可以将passport.jsJwtStrategy一起使用。这是主意:

mypassport.js

const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;

const opts = {
    jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
    secretOrKey: 'yourSecret'
};

passport.use(new JwtStrategy(opts, (payload, done) => {
    const user = findUserById(payload.id);
    if (!user) {
        return done('user not exists', null);
    }
    return done(null, user);
}));

server.js (使用快递)

require('./mypassport'); // <- initialize passport strategies

//you could also use passport with local strategy for this
app.post('login', (req, res) => {
    const username = req.query.username;
    const password = req.query.password;
    if (validLogin(username, password)) {
        const user = findUserByUsername(username);
        const jwt = createTokenWithSecret(user, 'yourSecret'); // You can use jwt-simple for this
        res.json({ token: jwt });
    } else {
        //send unauthorized
    }
});

const requireLogin = passport.authenticate('jwt');
app.get('/something', requireLogin, (req, res) => {

    //here, user is authenticated and available in 'req.user'

});

首先,您必须使用POST /login { username: 'john', password: '1234' }登录。这将返回带有jwt令牌的JSON,如下所示:

{ token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c' }

在后续请求中,您必须发送标头Authorization,其值是Bearer {token},以便passportjsJwtStrategy可以授权该请求。

希望有帮助!

注意:我没有在上面测试代码,只是显示了方法。

答案 1 :(得分:0)

对于API身份验证,请使用Passport JS

答案 2 :(得分:0)

您可以使用json网络令牌(jwt)进行API授权。有可用的节点模块提供身份验证功能,您可以简单地使用。

请查看这篇文章:https://medium.freecodecamp.org/securing-node-js-restful-apis-with-json-web-tokens-9f811a92bb52?gi=89f3f4d89dfd