JsonWebToken

JWT (JsonWebToken)

JWT官网

JsonWebToken_第1张图片
jwt.PNG

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
  • 4.签名

利用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这个测试接口
    JsonWebToken_第2张图片
    image.png

    返回了信息说明服务器没问题的
  • 2.访问PSOT'http://192.168.1.10:5000/api/posts'
    JsonWebToken_第3张图片
    image.png

    这里返回的是Forbidden也就是403服务器拒绝访问的
  • 3.这时我们访问http://192.168.1.10:5000/api/login
    JsonWebToken_第4张图片
    image.png

    这时就返回了Token值
  • 4.我们在请求头中加入Authorization 验证类型为 Bearer
    JsonWebToken_第5张图片
    image.png

    可以看到过期时间exp和签发时间lat
    同步更新到我的个人博客曌明博客

你可能感兴趣的:(JsonWebToken)