欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 对jwt的理解

对jwt的理解

2024/10/24 4:39:35 来源:https://blog.csdn.net/2301_77133858/article/details/140237179  浏览:    关键词:对jwt的理解

json web token

先看写好的

例子

const jwt = require("jsonwebtoken");//加密字符串
const secretKey = "xixihaha";// 生成token
module.exports.generateToken = function (payload) { const token =jwt.sign(payload, secretKey, {expiresIn:60*5,//有效时间});return  "Bearer "+token;//前端写入本地存储,然后写入请求头
};
app.post('/login',async(req,res)=>
{const {name,password}=req.bodylet re=await req.app.locals.db.query(`select password,type from userInf where name='${name}'`)if(re.recordset[0]){if (password==re.recordset[0].password){let admin=falseif(re.recordset[0].type.trim()=='0'){admin=true}const token = generateToken({name:name,admin: admin});res.send({code: 200,msg: "注册成功",data: { token },});}}
})

 

解释

先看一个jwt

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiYWRtaW4iLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNzIwMjY2MTYwLCJleHAiOjE3MjAyNjY0NjB9.wV545vjMchdShO69hUwT3rGa4gu52yDyqQusUU0cUbY

分为四个部分,'Bearer'以及三个'.',三个.内容分别对应header,payload,signature

第一个.的内容 header

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

是对类型和加密算法的base64编码,可以解密

第二个. payload

eyJuYW1lIjoiYWRtaW4iLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNzIwMjY2MTYwLCJleHAiOjE3MjAyNjY0NjB9

 放一些有标识性的东西,也是base64编码,可逆,所以不能放密码,前面这里传的就是编码前的paload

  const token = generateToken({name:name,admin: admin});

 

第三个.signature签名 

是对编码后的payload,header,以及secretKey,使用header中说明的加密算法,加密后形成

也就是说签名是对payload,header和secretKey加密形成的

在 JWT 中,Header 和 Payload 是编码,而 Signature 是基于加密的签名。

为什么能确定用户身份

如果对payload内容进行修改,那么当数据来到后端,再次基于header,payload,secretkey加密得到的结果必定与原有token不一致,进一步说明secerkey的重要性,因为在token中header,payload都只是编码,能保证token唯一性的就是secerkey。

如何使用?

在请求头加上"Bearer"+空格+token,也可以是后端返回token时直接返回加上的

 return  "Bearer "+token;//前端写入本地存储,然后写入请求头

为什么加上"Bearer "?

因为有多种认证方式 Basic 认证、Bearer 认证、OAuth 认证,不同方式处理不一样,需要标识

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com