微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在标题中检查 JsonWebToken (JWT)? 1. 2 代码的区别 2. 解释3.结论

如何解决如何在标题中检查 JsonWebToken (JWT)? 1. 2 代码的区别 2. 解释3.结论

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

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

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

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

这两者有什么区别?

解决方法

这两者有什么区别?

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

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

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;
,

1. 2 代码的区别。

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

2. 解释

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

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

授权:持有人[[token]]

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

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

  • 首先,确保请求具有正确格式的授权标头
  • 其次,将授权头按空格拆分,令牌是数组的第二个元素。

这就是第一个版本所做的。

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

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

)

3.结论

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。