基于JWT的接口权限验证

在做登录界面时,有很多关于安全验证的方法,比如:
1、可以使用Session来实现安全验证
2、对请求的接口的参数进行加密的签名验证
3、使用JWT实现接口的验证

  • 基于Session的安全验证
    Session存储在服务器中,用户较少的话可以使用该类简单的安全验证机制,但是涉及到跨域就需要进行一些配置,用户量大的话存在一定情况的风险。

  • 对请求参数进行加密的签名验证
    该方法的优点在于:1、url参数防篡改 2、sign 防重放 3、身份是否合法
    前端通过设置不同的规则,将传递的参数进行处理:
    1、对参数按照key=value的格式,并按照参数名ASCII字典序排序:
    2、拼接API密钥生成Sign:
    3、发送新的数据

  • 使用JWT实现接口的验证
    JWT是目前主流的跨域身份验证的解决方法,也是常用的一种安全验证机制。

nodejs中使用JWT实现接口的安全验证:

1、安装jsonwebtoken

cnpm install jsonwebtoken --save

2、生成token

var jwt = require('jsonwebtoken');
router.get('/',function(req,res,next){
    var token = jwt.sign({name:'admin'},'sign',{
      expiresIn: 60
    });
    res.send(token);
})

3、安装basic-auth

cnpm install basic-auth --save

4、获取请求头里面的token

router.get('/addressList',function(req,res,next){
  var token = auth(req);
})
router.get('/addressList', function (req, res, next) {
  var tooken = auth(req);
  if (tooken) {
    try {
      var  power= jwt.verify(token.name, 'sign');
      console.log( power);
      if ( power) {
        res.send('有权限');
      } else {
        res.send('没有权限');
      }
    } catch (error) {
      res.send(error);
    }
  }else{
    res.send('没有权限');
  }
});

5、Vue React Angular 使用 Axios 访问基于 Jwt 的接口

axios.get("http://localhost:3000/api/list", {
  auth: {
    username:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoi5byg5LiJIiwiaWF0IjoxNTcxMTIwNTE3LCJleHAiOjE1NzExMjIzMTd9.Kcbvg7AGqZlmVyUb8CKyO3fqf-zEwqIWEN2nsUSl17Q", 
    password: "123456"
    }
  }).then(function(response) {
    // handle success
    console.log(response);
   }).catch(function(error) {
    // handle error
    console.log(error);
  }).finally(function() {
    // always executed
})
  • JWT的优点:
    由于服务器不保存 session 状态,因此无法在使用过程中更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效。JWT 不仅可以用于认证,也可以用于交换信息。使用 JWT可以降低服务器查询数据库的次数。

你可能感兴趣的:(基于JWT的接口权限验证)