使用NodeJS验证包含"Bearer:"的JWT标记字符串

Ser*_*rov 6 node.js jwt

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

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

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

const token = authHeaderValue.replace('Bearer: ', '')
Run Code Online (Sandbox Code Playgroud)

在解码和验证之前?

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

Nar*_*ula 15

我使用这种技术。

// Header names in Express are auto-converted to lowercase
let token = req.headers['x-access-token'] || req.headers['authorization']; 

// Remove Bearer from string
token = token.replace(/^Bearer\s+/, "");

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

在这里,我们使用正则表达式去除 JWT 前面的任何 Bearer 字符串。如果包含任何空格,它也会被删除。


cas*_*lin 9

BearerHTTP Authorization标头中的值表示身份验证方案,就像BasicDigest.它在RFC 6750中定义.

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

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

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