检查令牌是否适用于端点 - Node / Express

时间:2018-04-03 05:06:25

标签: node.js express nodes

不确定如何检查身份验证令牌及其设置方式。首先,我在前端登录时调用令牌端点 - api / token - 我得到的响应是我在此应用程序的其余端点上使用的令牌作为前端的标头。 call-api / token - 用另一种语言调用另一个服务器端项目。无论如何,我从这个电话中取回了令牌。如何在每次通话时检查节点侧的令牌是否正确?

这是我添加的简单中间件,但它没有检查所提供的令牌是否正确。即使检查令牌是否正确,这是正常的吗?或者只是检查是否存在令牌?

app.use((req, res, next) => {
        if(!req.headers.authorization){
            return res.status(403).json({ error: 'No credentials sent!'});
        }
        next();
    })

谢谢!

1 个答案:

答案 0 :(得分:0)

  

甚至检查令牌是否正确是否正常?或者只是检查是否存在令牌?

你需要检查"存在"和"有效性"令牌

如果您只检查在线状态,则可能会允许您尚未发出无效令牌 服务器

app.use((req, res, next) => {
  if (!req.headers.authorization) {
    // this will allow if the authorizaton is set to '1' or 'some random string'
    return res.status(403).json({
      error: 'No credentials sent!'
    });
  }

  next();
});

app.get('/', (req, res) => {
  return res.status(200).send({
    result: 'hello world'
  });
});

在这里,显然123是无效的令牌。但仍然应用程序允许它

  卷曲-H'授权:123' http://localhost:3000

<强>响应

  

{&#34;结果&#34;:&#34;你好世界&#34;}

我们可以通过验证使用jwt-simple或任何类似软件包

收到的令牌来解决此问题
app.use((req, res, next) => {
  let jwt = require('jwt-simple');
  if (!req.headers.authorization) {
    return res.status(403).json({
      error: 'No credentials sent!'
    });
  }


  try { 
    let token = req.headers.authorization.split(' ')[1]
    var decoded = jwt.decode(token, 'your secret here');
  } catch (err) {
    console.log('err ', err.stack);
    return res.status(403).json({
      error: 'invalid token'
    });
  }

  next();
});

app.get('/', (req, res) => {
  return res.status(200).send({
    result: 'hello world'
  });
});

<强>响应

  

{&#34;错误&#34;:&#34;无效令牌&#34;}