token基础
- 一个
JWT(Java Web Token)
实际上就是一个字符串,它由头部、载荷与签名 三部分组成 - 编码之后的
JWT
是这样的一串字符
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
- 由
.
分为三段,通过解码可以得到
// 1. Headers头部
// 包括类别(typ)、加密算法(alg)
{
"alg": "HS256",
"typ": "JWT"
}
// 2. Claims载荷
// 包括需要传递的用户信息
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
// 3. Signature签名
// 根据alg算法与私有秘钥进行加密得到的签名字串
// 这一段是最重要的敏感信息,只能在服务端解密
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), SECREATE_KEY)
核心代码
const jwt = require('jsonwebtoken');
const secret = 'qwert'; //自定义
app.set('superSecret', secret);
//生成token
const token = jwt.sign(user, app.get('superSecret'));
//解码token
jwt.verify(token, app.get('superSecret'), function (err, decoded){
//decoded 是得到的用户信息
}
原理
- 安装
nodejs
的模块jsonwebtoken
,设置一个字符串当作密钥 - 如果登录成功,服务器就根据用户名和密钥生成一个
token
,并返回token
给客户端 - 如果想得到个人信息,就可以发送这个
token
,经过verify
验证成功,得到信息
总结
- 可以把生成的
token
存放在cookie
中,相当于把session Id
存放在cookie
中
demo地址
参考文章推荐:
Authenticate a Node.js API with JSON Web Tokens
JWT 在前后端分离中的应用与实践