基于JWT的接口權(quán)限驗(yàn)證

在做登錄界面時(shí),有很多關(guān)于安全驗(yàn)證的方法,比如:
1、可以使用Session來(lái)實(shí)現(xiàn)安全驗(yàn)證
2、對(duì)請(qǐng)求的接口的參數(shù)進(jìn)行加密的簽名驗(yàn)證
3、使用JWT實(shí)現(xiàn)接口的驗(yàn)證

  • 基于Session的安全驗(yàn)證
    Session存儲(chǔ)在服務(wù)器中,用戶較少的話可以使用該類簡(jiǎn)單的安全驗(yàn)證機(jī)制,但是涉及到跨域就需要進(jìn)行一些配置,用戶量大的話存在一定情況的風(fēng)險(xiǎn)。

  • 對(duì)請(qǐng)求參數(shù)進(jìn)行加密的簽名驗(yàn)證
    該方法的優(yōu)點(diǎn)在于:1、url參數(shù)防篡改 2、sign 防重放 3、身份是否合法
    前端通過(guò)設(shè)置不同的規(guī)則,將傳遞的參數(shù)進(jìn)行處理:
    1、對(duì)參數(shù)按照key=value的格式,并按照參數(shù)名ASCII字典序排序:
    2、拼接API密鑰生成Sign:
    3、發(fā)送新的數(shù)據(jù)

  • 使用JWT實(shí)現(xiàn)接口的驗(yàn)證
    JWT是目前主流的跨域身份驗(yàn)證的解決方法,也是常用的一種安全驗(yàn)證機(jī)制。

nodejs中使用JWT實(shí)現(xiàn)接口的安全驗(yàn)證:

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、獲取請(qǐng)求頭里面的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('有權(quán)限');
      } else {
        res.send('沒有權(quán)限');
      }
    } catch (error) {
      res.send(error);
    }
  }else{
    res.send('沒有權(quán)限');
  }
});

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的優(yōu)點(diǎn):
    由于服務(wù)器不保存 session 狀態(tài),因此無(wú)法在使用過(guò)程中更改 token 的權(quán)限。也就是說(shuō),一旦 JWT 簽發(fā)了,在到期之前就會(huì)始終有效。JWT 不僅可以用于認(rèn)證,也可以用于交換信息。使用 JWT可以降低服務(wù)器查詢數(shù)據(jù)庫(kù)的次數(shù)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容