JWT (JsonWebToken)
JWT官网
JWT简介
- 1.JWT(Json Web Token)是实现token技术的一种解决方案,JWT由三部分组成:
header(头)
、payload(载体)
、signature(签名)
。
- 2.头
HS384 HS512 RS256 RS384 RS512 ES256 ES384 ES512 PS256 PS384
有这几种
- 3.载体
iss:Issuer,发行者
sub:Subject,主题
aud:Audience,观众
exp:Expiration time,过期时间
nbf:Not before
iat:Issued at,发行时间
jti:JWT ID
利用Nodejs搭建简单的Token验证
jsonwebtoken的npm地址
const express = require('express');
const jwt = require('jsonwebtoken');
let app = express();
app.listen(5000,()=>{console.log('Server start port 5000')});
app.get('/api' , (req,res) => {
res.json({
'status': 200,
'msg' : '访问成功'
});
});
app.post('/api/login', (req, res) => {
/*
iss:签发人
iat:签发时间回溯30s
exp:过期时间 这里可是使用秒数,也可以使用day
"{"jti":1,"iss":"gumt.top","user":"goolge","iat":1555650413,"exp":1555657613}"
"iat": ~~(Date.now() / 1000)-30,
"exp": ~~(Date.now() / 1000)+(60*60),
*/
const user = {
"jti": 1,
"iss": "gumt.top",
"user": "goolge",
}
jwt.sign(user,"secretkey",{ expiresIn: '1day' },(err,token) => {
res.json({
token
})
})
});
app.post('/api/posts',verifyToken,(req,res) => {
jwt.verify(req.token, 'secretkey', (err, authData) => {
if(err) {
res.sendStatus(403);
} else {
res.json({
message: 'Post created...',
authData
});
}
});
});
function verifyToken(req, res, next) {
const bearerHeader = req.headers['authorization'];
if(typeof bearerHeader !== 'undefined') {
const bearer = bearerHeader.split(' ');
const bearerToken = bearer[1];
req.token = bearerToken;
next();
} else {
res.sendStatus(403);
}
}
通过post慢进行验证
- 1通过访问
http://192.168.1.10:5000/api
这个测试接口
返回了信息说明服务器没问题的
- 2.访问PSOT'http://192.168.1.10:5000/api/posts'
这里返回的是Forbidden
也就是403服务器拒绝访问的
- 3.这时我们访问
http://192.168.1.10:5000/api/login
这时就返回了Token值
- 4.我们在请求头中加入
Authorization
验证类型为 Bearer
可以看到过期时间exp
和签发时间lat