验证JWT令牌字符串,其中包含' Bearer:'与NodeJS

时间:2016-10-12 07:25:11

标签: node.js jwt

我以推荐的格式Authorization: Bearer <token>发送标题。

从外观上看,令牌字符串'Bearer: <token>'不是令牌,但需要首先删除'Bearer: '子字符串才能获取令牌字符串。

我想知道,如果通常的做法是从代码中手动删除它,例如:

const token = authHeaderValue.replace('Bearer: ', '')

在解码和验证之前?

为什么我的自定义应用程序中需要此'Bearer: '字符串?

4 个答案:

答案 0 :(得分:9)

HTTP Authorization标头中的值Bearer表示身份验证方案,就像BasicDigest一样。它在RFC 6750中定义。

应用程序可以支持多种身份验证方案,因此建议首先检查身份验证方案。

在基于令牌的身份验证中,首先确保Authorization标头包含Bearer字符串后跟空格。如果没有,拒绝请求。如果找到Bearer后跟空格,则提取必须位于空格字符后面的标记。

有关Bearer身份验证方案的详细信息,请参阅此answer

答案 1 :(得分:2)

我使用这种技术。

  let token = req.headers['x-access-token'] || req.headers['authorization']; 
  // Express headers are auto converted to lowercase
  if (token.startsWith('Bearer ')) {
    // Remove Bearer from string
    token = token.slice(7, token.length).trimLeft();
  }
  if (token) {

  jwt.verify(token, config.secret, (err, decoded) => {
    if (err) {
      return res.json({
        success: false,
        message: 'Token is not valid'
      });
    } else {
      req.decoded = decoded;
      next();
    }
  });

在这里,我们要剥离JWT前面的任何Bearer字符串。切片7删除了至少7个字符“ Bearer”,并且如果包括其他空格,trimStart会照顾好它。

答案 2 :(得分:0)

身份验证标头请求具有IETF中定义的格式。

即。身份验证:

类型包括以下内容:Bearer,error_code,error_description。

我们可以通过','字符分隔一次发送几种类型。

承载是一种身份验证访问类型。

参考:https://tools.ietf.org/html/rfc6750#page-14

答案 3 :(得分:0)

我使用split函数提取token

const bearerHeader = req.headers['authorization'];
if(! bearerHeader ){
    return res.sendStatus(403);
}
else
{
    const bearerToken = bearerHeader.split(' ')[1];
    let data = await jwt.verify(bearerToken,secretkey);
}