【问题标题】:How to check JsonWebToken (JWT) in Headers?如何检查标头中的 JsonWebToken (JWT)?
【发布时间】:2021-06-12 14:19:44
【问题描述】:

我有一个中间件来保护路由。我正在检查标头中是否存在令牌??

if(req.headers.authorization && req.headers.authorization.startsWith('Bearer')){
        token = req.headers.authorization.split(" ")[1]
    }

*我的问题是是否有必要通过添加 Bearer 来添加类似于上面代码中的内容?它是增强令牌存在检查的东西还是只是一种方式。 我认为这种方式也应该有效

if(req.headers.authorization){
        token = req.headers.authorization
    }

这两者有什么区别?

【问题讨论】:

  • 您可以通过测试找到这2个代码之间的区别。尝试发送请求:不带 Authorization 标头,使用空标头 Authorization,标头 Authorization 不以“Bearer”开头,标头 Authorization 以“Bearer”开头,但在 Bearer 和令牌...

标签: node.js jwt mern bearer-token


【解决方案1】:

这两者有什么区别?

if(req.headers.authorization && req.headers.authorization.startsWith('Bearer')){
        token = req.headers.authorization.split(" ")[1]
    }

它将检查authorization 标头是否存在并分配authorization 字符串,包括bearer,您需要先将其隔离以验证令牌

if(req.headers.authorization){
        token = req.headers.authorization
    }

它将检查authorization 是否存在,如果存在,则包括Bearer。可以检查,但不需要检查,除非您对所有 API 都采用相同的方法

你应该这样做:

const jwt = require('jsonwebtoken');


const verifyToken = async (req, res, next) => {
     const { authorization } = req.headers;
     const token = authorization.split(' ')[1];
     try {
          const jt = await jwt.verify(token, 'key');
          //do something
     } catch (error) {
          res.status(401).send("Unauthorized");
     }
     
}

module.exports = verifyToken;

【讨论】:

    【解决方案2】:

    1. 2个代码的区别。

    这两个代码有相同的目标:在标头 Authorization 中获取 JWT。根据您在请求中发送 JWT 的方式,它们的行为会有所不同。

    2. 解释

    通常,我们使用Bearer Authentication将JWT令牌发送到服务器。在这种模式下:

    客户端必须在授权标头中发送此令牌 向受保护资源发出请求:

    授权:承载[[token]]

    (来源:https://swagger.io/docs/specification/authentication/bearer-authentication/

    因此,要从请求中检索令牌,我们必须:

    • 首先,确保请求具有正确格式的授权标头
    • 其次,授权头用空格分割,token是数组的第二个元素。

    这就是第一个版本的作用。

    (注意:在拆分字符串之前应该检查头部是否包含空格

    if(req.headers.authorization && req.headers.authorization.startsWith('Bearer ')){
            token = req.headers.authorization.split(" ")[1]
        }
    

    )

    3。结论

    第一个版本基于一个流行的标准,应该稍加修改即可使用:)

    【讨论】:

      猜你喜欢
      • 2020-04-24
      • 2018-12-11
      • 2016-03-13
      • 2019-04-23
      • 2016-09-02
      • 2015-09-05
      • 1970-01-01
      • 2018-07-06
      • 2016-01-10
      相关资源
      最近更新 更多