我是NodeJS的新手,正在使用它开发API, 我希望使用API令牌方法对API进行身份验证(只有通过特定加密创建的具有存储在数据库中的令牌的人才能访问API资源。)
我正在使用SQL Server,NodeJS和Express框架。
请指导我如何使用身份验证API请求。
谢谢。
答案 0 :(得分:2)
您可以将passport.js与JwtStrategy
一起使用。这是主意:
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}
,以便passportjs
和JwtStrategy
可以授权该请求。
希望有帮助!
注意:我没有在上面测试代码,只是显示了方法。
答案 1 :(得分:0)
对于API身份验证,请使用Passport JS
答案 2 :(得分:0)
您可以使用json网络令牌(jwt)进行API授权。有可用的节点模块提供身份验证功能,您可以简单地使用。