首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node JS API鉴权

Node JS API鉴权
EN

Stack Overflow用户
提问于 2018-07-27 18:13:34
回答 3查看 710关注 0票数 0

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

我使用的是SQL server、NodeJS和Express框架。

请指导我应该使用什么来验证API请求。

提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2018-07-27 18:54:12

您可以在JwtStrategy中使用passport.js。这就是我们的想法:

mypassport.js

代码语言:javascript
复制
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)

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
{ token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c' }

在后续请求中,您必须发送带有值:Bearer {token}的头部Authorization,以便passportjsJwtStrategy可以对请求进行授权。

希望它能帮上忙!

注意:我没有测试过上面的代码,它只是展示了一种方法。

票数 2
EN

Stack Overflow用户

发布于 2018-07-27 18:18:19

对于API授权,请使用Passport JS

票数 0
EN

Stack Overflow用户

发布于 2018-07-27 18:22:32

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51555764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档