我是一个新手,正在使用它开发一个应用程序接口,我希望这个应用程序接口是通过一个应用程序接口令牌方法(只有一个令牌存储在数据库中,通过特定的加密创建的人才能访问NodeJS资源)进行身份验证的。
我使用的是SQL server、NodeJS和Express框架。
请指导我应该使用什么来验证API请求。
提前谢谢。
发布于 2018-07-27 18:54:12
您可以在JwtStrategy中使用passport.js。这就是我们的想法:
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 (使用express)
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' }在后续请求中,您必须发送带有值:Bearer {token}的头部Authorization,以便passportjs和JwtStrategy可以对请求进行授权。
希望它能帮上忙!
注意:我没有测试过上面的代码,它只是展示了一种方法。
发布于 2018-07-27 18:18:19
对于API授权,请使用Passport JS
发布于 2018-07-27 18:22:32
您可以使用json web token (jwt)进行API授权。有提供身份验证功能的节点模块,您可以简单地使用。
https://stackoverflow.com/questions/51555764
复制相似问题