【问题标题】:Verify a JWT token string, containing 'Bearer ' with NodeJS使用 NodeJS 验证包含“Bearer”的 JWT 令牌字符串
【发布时间】:2017-02-20 21:52:35
【问题描述】:

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

看起来,令牌字符串 'Bearer <token>' 不是令牌,但需要先删除 'Bearer ' 子字符串才能获取令牌字符串本身。

我想知道,从代码中手动删除它是否是一种常规做法,如下所示:

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

在解码和验证之前?

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

【问题讨论】:

标签: node.js jwt


【解决方案1】:

我使用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);
}

【讨论】:

    【解决方案2】:

    我使用这种技术。

    // 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'
      });
    }
    

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        即身份验证:

        类型包括:Bearer、error_code、error_description。

        我们可以通过“,”字符来一次发送多个类型。

        Bearer 是一种 Authentication 访问类型。

        参考:https://www.rfc-editor.org/rfc/rfc6750#page-14

        【讨论】:

          猜你喜欢
          • 2016-01-17
          • 2018-08-29
          • 2018-09-30
          • 1970-01-01
          • 2020-11-22
          • 2019-09-14
          • 2017-06-22
          • 2020-04-06
          • 2014-03-22
          相关资源
          最近更新 更多